【发布时间】:2014-09-11 23:24:01
【问题描述】:
函数 makearg 应该计算 char 数组中的单词数,并将每个单词分解为指针数组中它们自己的位置。 分段错误似乎是 strncpy 函数的问题。
int makearg(char s[], char ***args);
int main(){
char **args = (char**)(malloc(100));
char *str = "ls is a -l file";
int argc;
argc = makearg(str, &args);
printf("%d", argc);
printf("%c", '\0');
int i;
for(i = 0; i < argc; i++){
puts(args);
printf("%c", '\n');
}
return 0;
}
/////////////////////////////////////////
int makearg(char s[], char ***args){
int argc = 0;
int charc = 0;
int wordstart = 0;
while(1){
if(s[charc] == '\0'){
strncpy(*args[argc], s + wordstart, charc - wordstart);
args[argc][(charc - wordstart) + 1] = '\0';
argc++;
break;
}
if(s[charc] == ' '){
strncpy(*args[argc], s + wordstart, charc - wordstart);
args[argc][(charc - wordstart) + 1] = '\0';
wordstart = charc + 1;
argc++;
charc++;
}
else{
charc++;
}
}
return argc;
}
【问题讨论】:
-
1)
char **args = (char**)malloc(100*sizeof(char*));2)args[index] 未初始化(内存区域需要由 strncpy 存储)。 3)*args[argc],-->(*args)[argc],当char ***args; -
4)
puts(args);-->puts(args[i]);5)args[argc][(charc - wordstart) + 1] = '\0';-->args[argc][charc - wordstart] = '\0'; -
6)
int makearg(char s[], char ***args){:不需要三重指针,因为它没有被重写。 7)printf("%c", '\0');没有意义 -
@BLUEPIXY 写一个答案
-
@Eric
printf("%c", '\0');试图达到什么目的
标签: c arrays pointers segmentation-fault