Strtok解析并存储到阵列中

时间:2014-11-19 06:47:35

标签: c pointers memcpy strtok

我正在尝试解析一些包含一些文件名作为参数的字符串。 我的目标是解析一个命令及其参数,存储它到一个二维char数组。

示例输入:

/* Where 'cmd' is a command, file* are the arguments */
cmd file1 file2 file3     

这是我的代码:

int8_t **file_names = NULL;

/* Allocate Memory for the array,  
Max of 5 files of max strlen 64 each */
file_names = malloc(sizeof(char *));
for(i=0; i<5; i++)
*(file_names + i) = malloc(sizeof(char) * 64);

/* Receive command from user */
cmd = malloc(sizeof(char) * 1024);
printf("Please Enter the command:\n");
fgets(cmd, 2048, stdin);
cmd[strlen(cmd) - 1] = '\0';   /* Overwrite Newline by '\0' char */

int j = 0;
/* Tokenise the file names and cpy to 2d array */
ptr = strtok(cmd, " ");        /* Contains command 'cmd' */
printf("First Token  : [%s]\n\n", ptr);

printf("Parsing Filenames now:\n");
while(ptr = (strtok(NULL, " ")))
{
    printf("\tToken  : [%s]\n", ptr));
    memcpy(*(file_names + j), ptr, strlen(ptr));        /* Copy to 2D array */
    printf("\tFile Name : [%s]\n", *(file_names + j));
    j++;
};

输出是:

$ gcc 2d.c -Wall -Wextra
$ ./a.out 
Please Enter the command
cmd file1 file2 file3
First Token  : [cmd]

Parsing Filenames now
    Token  : [file1]
    File Name : [file1�,    ȡ,  �,  X�, ��, ]
    Token  : [file2]
    File Name : [file2]
    Token  : [file3]
    File Name : [file3]

问题

我不知道为什么第一个令牌附加了垃圾。 虽然ptr获得了正确的数据。我怀疑是memcpy,但strlen会为5返回正确的ptr个字节。

  

strtok(3)也说:

     

每次调用strtok()都会返回一个指向包含下一个标记的以空字符结尾的字符串的指针。

所以我认为它应该以null结尾,并且只应打印file1

0 个答案:

没有答案