Don*_*van 1 c string concatenation
我正在编写一个C程序,它接受n字符串并使用strcat连接它们.首先,我在sizeof(char)*每个字符串+1的strlen中分配目标字符串(对于空字符).然后使用for我使用strncat创建最终字符串.在和,我附加空字符.
一切都很顺利,但有时,在目标字符串的开头,有一些奇怪的字符(例如,'?').当在程序执行期间,最终字符串比之前更短(在同一执行期间)时,会发生这种情况.
有什么我想念的吗?
这是代码:
size = 0;
for(i = 0; i < n; i++) {
size += sizeof(char)*(strlen(strings[i]));
}
size++;
target = malloc(size);
if(!target) { /** Error handling... */ }
for(i = 0; i < n; i++) {
target = strncat(target, strings[i], strlen(strings[i]));
}
target[size] = '\0';
Run Code Online (Sandbox Code Playgroud)
谢谢,
-Donovan
您应该在分配目标字符串后立即将其初始化为空字符串.
target[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
在第一次调用时strncat,第一个字符串将附加到目标.如果您的目标未初始化,则可能不为空,这会导致您看到的垃圾字符.
(另一种解决方案是将第一个字符串复制strncpy到目标中,然后将以下字符串附加到其中.)