我对编程还是很陌生的,但我正在尝试编写一个函数,在给定的字符串中复制字母。对于每个字母中包含多少个字母,它需要一系列整数输入,然后将每个字母串联到stretched
字符串的末尾。我需要动态分配内存。
这就是我所拥有的:
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返回
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
,并使用了malloc
、calloc
、realloc
、strcpy
、strcat
。
对于造成分割错误的原因有什么想法,以及如何修复?(谢谢:)
编辑:我最终修复了它,我在malloc
之后使用了malloc
,然后下一个问题实际上是在我的main()
中,我试图将返回的值strcpy
成一个char*
。谢谢你的帮助!
发布于 2022-03-04 07:26:18
为了使用strcat
系列函数,您需要一个以空结尾的字符串。您的stretched
数组充满了垃圾,然后在这个垃圾数组的末尾有一个空终止符,它可以包含任何东西(包括其他地方的值0)。
而不是stretched[total] = '\0';
,您需要执行stretched[0] = '\0';
。
此外,您还必须确保该数组足够大,足以包含所有数据,包括一个空终止符。(每个strcat
调用都会在新字符串的末尾添加一个。)
https://stackoverflow.com/questions/71345686
复制相似问题