我正在尝试使用命令行参数&编写一个程序。数组指针......
我的目标是通过命令行参数找到我们传递的值。
使用strtok作为分隔符
分隔这些值但是我在2次迭代后得到了分段错误。我不明白我犯了哪些错误。
有人可以帮助我摆脱这个问题吗?
int main(int argc,char *argv[])
{
char *str[] = {};
char *string = argv[1];
const char s[2] = ",";
char *token = "";
int i = 0,j = 0,k = 0,l = 0,m = 0;
token = strtok(string, s);
while( token != NULL )
{
str[i] = token;
printf("str[%d]= %s\n",i,str[i]);
i++;
token = strtok(NULL, s);
}
return 0;
}
bash-3.2 $ ./code hi,bye,hello,car
str [0] = hi
str [1] = bye
分段错误(核心转储)
答案 0 :(得分:1)
您没有分配足够的内存来存储str
中的标记化字符串。
更改行
char *str[] = {};
到
char *str[ARRAY_SIZE] = {};
并将ARRAY_SIZE
定义为足以容纳所有令牌的值。
答案 1 :(得分:1)
问题是变量str没有分配任何内存。您尝试在其中存储一系列char *
指针,但没有内存存储位置。
快速解决方法是定义一定数量的插槽:
char *str[10];
在while循环中,您应该检查您是否尝试存储超过10个指针。