当我将任何字符输入字符数组时,我初始化了一个大小为4的字符数组
char a[4];
a[1]='z';
printf("The character array is %s\n", a);
输出显示我
字符数组是
但后来我改变了一点
char a[4];
a[1]='z';
printf("The first character of the array is %s\n", a[1]);
输出显示我
数组的第一个字符是z
这是为什么 ?我如何使用我的字符数组,例如我是否希望使用strcmp()函数对它们进行比较。请帮我....
在第一段代码中,您只设置了一个数组元素。其他三个元素未初始化。因此,当你调用printf
并传入a
时,它会读取那些未初始化的字节。这样做会调用undefined behavior,在这种情况下表现为没有打印。
在这种特殊情况下可能发生的是数组的第一个元素,即索引为0的元素,可能是0.该值用于终止字符串,因此a
被视为空字符串。
也:
数组的第一个字符是z
不它不是。 C中的数组以索引0开头,而不是索引1。
如果要将字符串复制到数组中,请使用strcpy
:
strcpy(a, "z");
在此代码段中
char a[4];
a[0]='z';
a[1]='y';
printf("The character array is %s\n", a);
数组不包含字符串(以零字符结尾的字符序列)。但是,您尝试使用转换说明符%s
将其输出为字符串。
相反,你应该写
printf("The character array is %*.*s\n", 2, 2, a);
在此代码段中
char a[4];
a[0]='z';
a[1]='y';
printf("The first character of the array is %c\n", a[0]);
printf("The second character of the array is %c\n", a[1]);
再次,该数组不包含字符串。但是,您输出单独的字符。所以没有问题。
如果要在数组中存储字符串,则应将其添加为零字符。例如
char a[4];
a[0]='z';
a[1]='y';
a[2] = '\0';
printf("The character array is %s\n", a);
标准C字符串函数strcmp
处理字符串。因此,您将要使用此函数的数组应包含字符串。
你可以使用另一个标准函数memcmp
。