一:
数组名即数组第一个元素的地址。
#include <stdio.h>
//int main()
//{
// int a;
// int *p = &a; //&a表示把a的地址的数值赋予给p
// printf("请输入一个整数:");
// scanf("%d",&a); // 取来存放的地址,将数值放进去
// printf("a= %d\n",a);
//
// printf("请重新输一个整数:");
// scanf("%d",p); //&p是指针本身的地址 ,p本身就是a的地址
// printf("a= %d\n",a);
//
// return 0;
// }
int main()
{
char a[] = "pangou";
// 数组名就是数组第一个元素的地址
char *p = a; // a是一个指向 &a[0]的指针,即数组a的第一个元素的地址
printf("*p = %c,*(p+1) = %c,*(p+2) = %c\n",*a,*(a+1),*(a+2));
printf("*p = %c,*(p+1) = %c,*(p+2) = %c\n",*p,*(p+1),*(p+2));
return 0;
}
二:
fgets 函数用于从指定文件中读取字符串。
fgets 函数最多可以读取 size - 1 个字符,因为结尾处会自动添加一个字符串结束符 '\0'。当读取到换行符('\n')或文件结束符(EOF)时,表示结束读取('\n' 会被作为一个合法的字符读取)。
注意:计算长度的时候,\n也会被计入进去。
char *fgets(char *s, int size, FILE *stream);
参数 | 含义 |
s | 字符型指针,指向用于存放读取字符串的位置 |
size | 指定读取的字符数(包括最后自动添加的 '\0') |
stream | 该参数是一个 FILE 对象的指针,指定一个待操作的数据流 |
fget() 函数中的 size 如果小于字符串的长度,那么字符串将会被截取;如果 size 大于字符串的长度则多余的部分系统会自动用 ‘\0’ 填充。所以假如你定义的字符数组长度为 n,那么 fgets() 中的 size 就指定为 n–1,留一个给 ‘\0’ 就行了。
但是需要注意的是,如果输入的字符串长度没有超过 n–1,那么系统会将最后输入的换行符 ‘\n’ 保存进来,保存的位置是紧跟输入的字符,然后剩余的空间都用 ‘\0’ 填充。所以此时输出该字符串时 printf 中就不需要加换行符 ‘\n’ 了,因为字符串中已经有了。
#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
int main()
{
char str[MAX];
char *target = str;
char ch;
int length = 0;
printf("请输入一个字符串");
fgets(str,MAX,stdin);
while(1)
{
ch = *target++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
target +=1;
}
length++;
}
printf("%d\n",length-1);
return 0;
}
// 以下代码证明每个中文字符在我电脑系统占3个字节的存储空间;
/*int main()
{
char str[] = "中";
int length,i;
length = sizeof(str); //sizeof(str[0])
printf("lengt of str:%d\n",length);
for (i = 0; i < length; i++)
{
printf("str[%d]=%d\n",i,str[i]);
}
return 0;
}
*/
三:
int main()
{
char str1[MAX];
char str2[MAX];
char *target1 = str1;
char *target2 = str2;
char ch ;
int n ;
printf("请输入一个字符串到 str1中:");
fgets(str1,MAX,stdin);
printf("请输入需要拷贝的字符个数:");
scanf("%d",&n);
printf("开始拷贝str1 的内容到 str2 中...\n");
while (n--)
{
ch = *target2++ = *target1++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
*target2++ = *target1++;
}
}
*target2 = '\0'; //字符串一般以\0结尾
printf("拷贝完毕");
printf("现在 ,str2中的内容是:%s\n",str2);
return 0;
}
四:
while (n-- && (*target2++ = *target1++) != '\0')
实现 strncpy 函数的功能