[英]Segmentation fault while using strcat(num, num) to concatenate string to itself
我使用 strcat function 连接“1”和“1”,结果为“11”,但出现分段错误。
我的代码如下:
#include <stdio.h>
#include <string.h>
int main(){
char num[10] = "1";
strcat(num, num);
printf("%s", num);
}
考虑到最有可能实现的strcat
,不要这样做。 一般来说,为输入和 output 传递相同的参数是一个坏主意。 事实上,让我们把它说得好一点。 除非 function 说它已定义,否则它没有定义,所以不要这样做。
尝试这个:
size_t n = strlen(num);
memmove(num + n, num, n + 1);
memmove
是一款不错的 function,专为重叠输入和输出而设计。
您不能使用strcat
连接两个重叠的字符串,包括它们是相同字符串的情况。
https://en.cppreference.com/w/c/string/byte/strcat :“如果字符串重叠,则行为未定义。”
C17 7.24.3.1 (2):“如果复制发生在重叠的对象之间,则行为未定义。”
您必须手动编写连接例程,或者考虑基于memcpy
的解决方案。
您需要两个 char[] 一个作为源,另一个作为目标,其中目标数组必须初始化并且有足够的空间来容纳源长度。
#define DEST_SIZE 40
int main(){
char num[10] = "1";
char dest[DEST_SIZE] = "1"; //Destination with null characters after "1"
strcat(dest,num);
printf(dest);
return 0;
}
有关不同场景的详细说明: here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.