这太奇怪了。根据我首先声明/初始化哪个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/

10-09 09:04