如何解决使用 strcat(num, num) 将字符串连接到自身时出现分段错误
我使用 strcat 函数连接“1”和“1”,结果是“11”,但我遇到了分段错误。
我的代码如下:
#include <stdio.h>
#include <string.h>
int main(){
char num[10] = "1";
strcat(num,num);
printf("%s",num);
}
解决方法
考虑到 strcat
最有可能的实现,不要这样做。通常,将相同的参数传递给函数的输入和输出是一个坏主意。事实上,让我们把这个更好一点。除非函数说它已定义,否则它没有定义,所以不要这样做。
试试这个:
size_t n = strlen(num);
memmove(num + n,num,n + 1);
memmove
是一个很好的函数,专为重叠输入和输出而设计。
您不能使用 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。