微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中连接字符串:函数调用后没有清除字符串缓冲区

如何解决在 C 中连接字符串:函数调用后没有清除字符串缓冲区

我试图在函数 foo() 中连接两个字符串。我希望 string内容在第一次和第二次调用 abc 之后都是 foo()。第一次调用后我得到的输出abc 但第二次调用打印 abcabc (第三次调用打印 abcabcabc 等等)。字符串缓冲区没有被清除。如果有人可以分享它在内部是如何工作的——内存是如何分配给字符串的,以及为什么在函数的后续调用之间没有清除字符串缓冲区,那将会很有帮助。

这是我使用的代码

#include <stdio.h>
#include <string.h>

int foo(){
    unsigned char string[100];
    unsigned char text[10] = "abc";
    strcat(string,text);
    printf("%s\n",string);
}

int main(){
    foo();
    foo();
    return 0;
}

解决方法

您忘记初始化 string 变量。这就是你所有问题的原因。尝试访问未初始化变量的值会导致 Undefined behavior

参考(Why) is using an uninitialized variable undefined behavior?

#include <stdio.h>
#include <string.h>

int foo(){
    unsigned char string[100] = "";
    unsigned char text[10] = "abc";
    strcat(string,text);
    printf("%s\n",string);
}

int main(){
    foo();
    foo();
    return 0;
}
,

string 尚未初始化,因此不包含有效字符串。因此,当 strcat 读取它以找到它 invokes undefined behavior 的空终止符时。使用前必须先初始化

unsigned char string[100] = { 0 };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。