如何在strcmp()函数中使用字符数组

问题描述 投票:0回答:2

当我将任何字符输入字符数组时,我初始化了一个大小为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()函数对它们进行比较。请帮我....

c arrays character
2个回答
2
投票

在第一段代码中,您只设置了一个数组元素。其他三个元素未初始化。因此,当你调用printf并传入a时,它会读取那些未初始化的字节。这样做会调用undefined behavior,在这种情况下表现为没有打印。

在这种特殊情况下可能发生的是数组的第一个元素,即索引为0的元素,可能是0.该值用于终止字符串,因此a被视为空字符串。

也:

数组的第一个字符是z

不它不是。 C中的数组以索引0开头,而不是索引1。

如果要将字符串复制到数组中,请使用strcpy

strcpy(a, "z");

1
投票

在此代码段中

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

© www.soinside.com 2019 - 2024. All rights reserved.