这太奇怪了。根据我首先声明/初始化哪个char数组,当我在C中对另一个数组执行strncat()时,一个空白数组似乎会被覆盖。
代码:
char t_str[]="";
char ran_str[]="";
... inbuf ="8889 ";
while (inbuf[pos]!=' ')
{
strncat(t_str, &inbuf[pos],1);
printf("t_str so far: %s\n", t_str);
printf("ran_str so far: %s\n", ran_str);
pos++;
}
输出:
t_str so far: 8
ran_str so far:
t_str so far: 88
ran_str so far: 8
t_str so far: 888
ran_str so far: 88
t_str so far: 8889
ran_str so far: 889
如果我在
ran_str
之前初始化t_str
,则ran_str[]
不会被填充,因为我是strncat()
t_str
。为什么会这样? 最佳答案
这是因为几个问题:t_str
(和ran_str
)只有1字节长。(空终止符)inbuf
中没有空格,因此循环永远不会结束。
因为ran_str
是在t_str
之后声明的,所以当strncat
溢出t_str
缓冲区时,它会写入ran_str
中。
您需要为t_str
分配更多的内存(可能还有ran_str
),并检查它们是否溢出。您还需要检查是否未到达空终止符,以确保您的阅读时间不超过inbuf
的结尾。
关于c - C中的char数组是否被strncat()覆盖?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19186555/