首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中用strcat和malloc分割故障的方法

C中用strcat和malloc分割故障的方法
EN

Stack Overflow用户
提问于 2022-03-04 01:36:49
回答 1查看 78关注 0票数 0

我对编程还是很陌生的,但我正在尝试编写一个函数,在给定的字符串中复制字母。对于每个字母中包含多少个字母,它需要一系列整数输入,然后将每个字母串联到stretched字符串的末尾。我需要动态分配内存。

这就是我所拥有的:

代码语言:javascript
运行
复制
char * stretch (char * aString) {

   int length;
   int i, k, checking;
   int amount[10];
   int aTotal = 0;
   char *stretched;
   char ch;

   length = strlen(aString);

   for (i = 0; i < length; i++) {

      printf("Enter an amount: ");
      scanf("%d", &checking);

      while (checking <= 0) {

         printf("\nPositive integers only\n");

         printf("Enter an amount: ");
         scanf("%d", &checking);
      }
      amount[i] = checking;
   }

   for (i = 0; i < length; i++) {
      aTotal = aTotal + amount[i];
   }

   stretched = malloc(sizeof(char) * total + 1);
   stretched[aTotal] = '\0';

   for (i = 0; i < length; i++) {

      ch = aString[i];
      for (k = 0; k < amount[i]; k++) {
         strncat(stretched, &ch, 1);
      }
      printf("stretched: %s", stretched);
   }
   return stretched;
}

我的结果是一个分段错误,但是“拉伸”字符串确实有效,打印语句显示stretched包含正确的数据(即。如果绳子是“嗨!”而输入是2 1 3,然后在循环的末尾stretched包含“HHi!!”)。但是,我不能在for循环之外打印stretched,但是我可以只打印一个基本字符串来显示它离开循环。

运行gdb返回

代码语言:javascript
运行
复制
Program received signal SIGSEGV, Segmentation fault.
__strcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:716
716 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.

老实说,我不知道这意味着什么。

我已经尝试了我所能想到的一切,以及大多数我可以在网上理解的解决方案。我已经用很多方法初始化了stretched,并使用了malloccallocreallocstrcpystrcat

对于造成分割错误的原因有什么想法,以及如何修复?(谢谢:)

编辑:我最终修复了它,我在malloc之后使用了malloc,然后下一个问题实际上是在我的main()中,我试图将返回的值strcpy成一个char*。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-03-04 07:26:18

为了使用strcat系列函数,您需要一个以空结尾的字符串。您的stretched数组充满了垃圾,然后在这个垃圾数组的末尾有一个空终止符,它可以包含任何东西(包括其他地方的值0)。

而不是stretched[total] = '\0';,您需要执行stretched[0] = '\0';

此外,您还必须确保该数组足够大,足以包含所有数据,包括一个空终止符。(每个strcat调用都会在新字符串的末尾添加一个。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71345686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档