繁体   English   中英

使用 strcat(num, num) 将字符串连接到自身时出现分段错误

[英]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连接两个重叠的字符串,包括它们是相同字符串的情况。

您必须手动编写连接例程,或者考虑基于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM