我正在试着测试一些东西,我做了一个小的测试文件来做。代码是:
void main(){
int i = 0;
char array1 [3];
array1[0] = 'a';
array1[1] = 'b';
array1[2] = 'c';
printf("%s", array1[i+1]);
printf("%d", i);
}当我编译并尝试运行时,我收到一个分段错误。请让我知道我的问题是什么。
发布于 2018-05-01 03:34:36
字符串需要有NUL终止符,而你没有,也没有空间给它。
解决方案是再添加一个字符:
char array1[4];
// ...
array1[3] = 0;另外,您要求打印一个字符串,但却提供了一个字符。您需要提供整个buffer:
printf("%s", array1);那你就没问题了。
花时间学习C字符串是如何工作的,特别是关于终止符的要求,因为缓冲区溢出错误不是开玩笑的。
发布于 2018-05-01 03:39:00
请让我知道我的问题是什么。?首先,char array1[3];不是空终止的,因为没有足够的空间将'\0'放在array1的末尾。要避免这种未定义的行为,请增加array1的大小。
其次,array1[i+1]是一个单一的char而不是字符串,所以使用%c代替%s作为
printf("%c", array1[i+1]);发布于 2018-05-01 03:39:12
我建议你自己买一本关于C语言的好书/视频系列。这不是一种突然学会的有趣的语言。
无论如何,这里的问题是您没有形成一个正确的字符串。在C中,字符串是指向内存中恰好充满字符的连续区域开始的指针。没有存储任何关于它的大小或任何其他特征的数据。只知道它从哪里开始,它是什么。因此,您必须提供有关字符串何时显式结束的信息。这是通过将字符串中的最后一个字符设置为所谓的空字符(在C中由转义序列'\0'表示)来实现的。
这意味着任何字符串都必须比您希望它包含的内容长一个字符。您也不应该像这样手动设置字符串。使用诸如strlcpy这样的库函数来完成此操作。它将自动添加一个空字符,即使您的数组太小(通过截断字符串)。或者,您可以静态创建文字字符串,如下所示:
char array[] = "abc";它将自动为null终止,大小为4。
https://stackoverflow.com/questions/50107027
复制相似问题