![](/img/trans.png)
[英]fopen data corruption when printing char arrays from structure member char arrays in C
[英]Printing Char Arrays in C
我对我创建的一个简单函数有一个奇怪的问题。 此函数生成0-14之间的随机数,然后使用随机生成的数字作为大小创建一个数组,并使用char'x'填充它。
我遇到的问题是,当我调用该函数时,它将在x之后随机显示符号或数字。
我最初将数组声明为15号,但认为这是导致此显示问题的剩余插槽。 但是,更改功能后它仍然存在。
这是我正在使用的当前功能:
void application()
{
int randSize, i;
srand((unsigned)time(NULL));
randSize = (rand() % 15);
char array[randSize];
char *bar = array;
for(i=0; i< randSize; i++)
array[i] = 'x';
printf("%s | ", bar);
}
你不需要在C中用\\0
结束字符串吗? ) 例如:
char array[randSize + 1];
for (i=0; i < randSize; i++)
array[i] = 'x';
array[i] = '\0';
(更新了这个因为你确实想要获得 randSize
长度 字符串的有用部分 )。
printf("%s | ", bar);
%s
转换需要一个指向0终止字符数组的指针,但您的数组不是以0结尾的。 因此行为是未定义的,但通常发生的是printf
继续读取和打印字符,直到它找到0字节或到达禁止的内存,导致分段错误,以先发生者为准。
您正在使用printf
来打印C字符串。 C字符串必须以空值终止。
如果要将array
用作字符串,则需要分配一个附加字符,并在末尾附加\\0
:
char array[randSize + 1];
// loop to fill the array
array[i] = '\0';
由于printf
需要一个以null结尾的字符串,如果没有它,它将继续打印超过数组的边界,读取不属于数组的内存。
除非声明为const,否则如何使用变量进行编译? 这是C99的旧功能,不被视为标准配置。 在此之前不允许在C中使用,也不能在C ++中工作
char array[randSize];
正确的方法是
char *array = malloc(randSize);
我在这里错过了一些东西吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.