在 C 中连接字符串:函数调用后未清除字符串缓冲区
Concatenating strings in C: string buffer is not getting cleared after function call
我正在尝试在函数 foo()
中连接两个字符串。我希望 string
的内容在第一次和第二次调用 foo()
之后都是 abc
。我在第一次调用后得到的输出是 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 };
我正在尝试在函数 foo()
中连接两个字符串。我希望 string
的内容在第一次和第二次调用 foo()
之后都是 abc
。我在第一次调用后得到的输出是 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 };