【发布时间】:2015-06-07 06:46:43
【问题描述】:
我有一个函数可以找到传入数组的罗马数字,并将它们存储在字符串数组中,然后将字符串数组返回给 main()。但是当我尝试访问 main() 中返回的字符串数组时,代码由于分段错误而失败。有人可以解释一下为什么会这样吗?我该如何更正我的代码?
在代码中添加了 cmets,其中可以看到分段错误并且可以正常工作。非常感谢您的时间和帮助。
int find_lookup_index(int temp)
{
int j=0;
while(1)
{
if(temp>=lookup_int[j] && temp<lookup_int[j+1])
break;
j++;
}
return j;
}
char** romanizer(int num_size, int* num)
{
int i,j,temp;
char result[num_size][20];
for(i=0;i<num_size;i++)
{
strcpy(result[i],"\0");
if(num[i]%1000 == 0)
{
strcpy(result[i],"M");
continue;
}
j=find_lookup_index(num[i]);
temp=num[i];
while(temp>0)
{
strcpy(result[i],strcat(result[i],lookup_char[j]) );
temp = temp - lookup_int[j];
j = find_lookup_index(temp);
}
}
**/* WORKS CORRECTLY HERE */**
for(i=0;i<num_size;i++)
printf("%s\n",result[i]);
return (char **)result;
}
int main()
{
int size,i;
char **result;
int arr[3] = {3,11,499};
result = romanizer(3,arr);
**/* NOT WORKING - SEGMENTATION FAULT - WHY ? */**
for(i=0;i<3;i++)
printf("%s\n",result[i]);
return 0;
}
【问题讨论】:
-
您不仅返回本地自动 var 按地址,而且无论如何它都不是您要转换的类型。
char[n][m]确实not 表示为char**,并且如果没有硬转换它就不会编译应该是一个提示。不妨同时解决这两个问题。