我不明白为什么abc
后面有随机字符。原因何在?如何只打印出abc
?谢谢!
#include <stdio.h>
int main()
{
char arr[3];
char(*ptr)[3]; // declare a pointer to an array
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
ptr = &arr;
printf("%s\n", arr);
//printf("%s\n", ptr);
return 0;
}
3条答案
按热度按时间fwzugrvs1#
字符串需要以
\0
结束。确保分配足够的空间来存储终结器。请注意,使用
char arr[4]
,您的数组中将包含随机内容。如果你用这将导致
看看其他地方是如何用
0
填充的,这样你就不必自己设置了。1sbrub3j2#
使用随机字符的原因是您试图使用转换说明符
%s
将数组输出为字符串。但是字符数组
arr
不包含字符串(以零字符'\0'
结束的字符序列)。因此,要使用函数
printf
输出它,您可以使用以下方法:来自C标准(7.21.6.1 fprintf函数)
4每个转换规格均以字符%引入。在%之后,按顺序显示以下内容:
7lrncoxx3#
字符串必须以
0
结束。所以你必须声明4个元素的数组。
所有 printf 函数家族使用的
strlen
函数,读取字符串直到找到0
值。所以strlen
返回的内存块的长度,从数组的开头开始,以第一个零结束。这可能导致未定义的行为。