打印通过命令行参数传递的值时出现问题

时间:2016-09-15 16:11:09

标签: c

我正在尝试使用命令行参数&编写一个程序。数组指针......

我的目标是通过命令行参数找到我们传递的值。

使用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

分段错误(核心转储)

2 个答案:

答案 0 :(得分:1)

您没有分配足够的内存来存储str中的标记化字符串。

更改行

char *str[] = {};

char *str[ARRAY_SIZE] = {};

并将ARRAY_SIZE定义为足以容纳所有令牌的值。

答案 1 :(得分:1)

问题是变量str没有分配任何内存。您尝试在其中存储一系列char *指针,但没有内存存储位置。

快速解决方法是定义一定数量的插槽:
char *str[10];

在while循环中,您应该检查您是否尝试存储超过10个指针。