【发布时间】:2015-11-26 03:16:51
【问题描述】:
这里有更多代码,因为我现在修复了我的主要程序有问题。
我有一个修改一系列字节的函数。在这个例子中,函数应该用数字 1 到 9 连续填充 char 数组的前 9 个字节。
运行两个测试。第一个是调用参数为(char*)&myvar的函数。第二个测试只使用myvar作为参数。我想当我希望在函数的参数部分返回字符串时,我总是必须在 char 数组指针前面使用 &。
为什么这个程序只有在我不将(char*)& 附加到我的 char 数组变量时才能工作?
当我应用它时,我收到了分段错误。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int func(char* abc){
char *p=abc;
int n;
for (n=1;n<10;n++){
*p=(unsigned char)(n+48);p++;
}
return 0;
}
int main(){
char vars[1000]="234";
char *myvar=vars;
printf("Function test\n");
int result=func((char*)&myvar); //causes segfault
printf("Function result %s\n",myvar); //segfault here
printf("Function test again\n");
int result2=func(myvar); //works
printf("Function result %s\n",myvar);
printf("DONE\n");
return 0;
}
【问题讨论】:
-
尝试删除演员表
(char *) -
移除强制转换除了导致编译器警告之外什么都不做。它并没有以任何方式解决问题。
-
拆开你的代码,找出段错误的确切来源。
-
@AlanAu 这些警告正是为什么您需要移除演员表。告诉编译器保持安静并不能解决它抱怨的问题。警告使段错误的原因显而易见。
-
@mlp 当然应该删除演员表。那不是重点。只是说“删除演员表”并不能真正帮助显然需要解释指针的 OP。这就是为什么下面提供的答案很好的原因,因为它解释了需要做什么以及为什么需要这样做。
标签: c arrays segmentation-fault pass-by-reference memory-address