gpt4 book ai didi

c - 动态内存分配和返回值 3221225477

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:47 24 4
gpt4 key购买 nike

正在做作业,问题如下:

  1. 接受以逗号分隔的单词。
  2. 提取每个单词并反转它们。
  3. 把它们放回原位。

例如,如果我输入“apple,egg”,我得到“elppa,gge”

到目前为止,我已经完成了大部分程序,当我输入少于四个单词时,该程序运行良好,但输入超过四个单词时,例如“ybur,etaga,etiluzal,iluzal sipal,etihcalam”,该程序无法正常工作。不起作用,它显示返回值 3221225477。我刚刚学会了如何使用动态内存分配,所以我认为这可能是我没有正确使用它的事实,如果是这样,请纠正我。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
int c=1,i,s;
char a[1000];
fgets(a,1000,stdin);
for(i=0;i<strlen(a);i++){
if(a[i]=='\n'){
a[i]='\0';
}
}
for(i=0;i<strlen(a);i++){
if(a[i]==','){
c++;
}
}
char **b;
b=(char**)malloc(sizeof(char)*c);
for(i=0;i<c;i++){
b[i]=(char*)malloc(sizeof(char)*100);
}
strcpy(b[0],strtok(a,","));
for(i=1;i<c;i++){
strcpy(b[i],strtok(NULL,","));
}
char **d;
d=(char**)malloc(sizeof(char*)*c);
for(i=0;i<c;i++){
d[i]=(char*)malloc(sizeof(char)*strlen(b[i]));
for(s=0;s<strlen(b[i]);s++){
d[i][s]=b[i][strlen(b[i])-s-1];
}
}
printf("%s",d[0]);
for(i=1;i<c;i++){
printf(",%s",d[i]);
}
for(i=0;i<c;i++){
free(b[i]);
free(d[i]);
}
free(b);
free(d);
return 0;
}

我希望无论我输入什么词,程序都能正常运行。

最佳答案

b=(char**)malloc(sizeof(char)*c); 

应该是

b = malloc(sizeof(char *) * c); 
^--------------(sizeof pointer)

截至目前,您只分配了 sizeof char * cchar **应该是sizeof pointer * c .

此外,您不需要转换 malloc 返回值。

关于c - 动态内存分配和返回值 3221225477,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com