0

好吧,为了合理地了解正在发生的事情......

我正在将 csv 表中的数据读入一个二维数组,如下所示:

tableFile = fopen(argv[4], "r");
char tableArray[30][50][256];
char c;
int i=0, j=0, k=0;
while(c != EOF){

    c = fgetc(tableFile);

    switch(c)
    {
        case ',':
            tableArray[i][j++][k]='\0';
            k=0;
            break;
        case '\n':
            tableArray[i++][j][k]='\0';
            j=0;
            k=0;
            break;
        default:
            tableArray[i][j][k++] = c;
            break;
    }
} //end file transfer

fclose(tableFile);

读完文件后,我做了一堆无关紧要的垃圾,但问题是,当我从从所述表 printf 获取的数据中打印一些东西时,我会发疯。

例如,如果我要尝试说类似的话。

 char *string = malloc(256*sizeof(char));
 string = tableArray[9][46];
 printf("What the heck is going on with this string %s ", string);

看到 %s 之后的那个空格了吗?它实际上会覆盖“W”,并且 printf 会显示类似“帽子这个强大的 HELLO 正在发生的事情”

有任何想法吗?!?!

谢谢!

4

4 回答 4

4

您的读入行以'\r'. 您应该'\r'在您的switch.

于 2012-10-02T14:29:25.237 回答
2

该字符串可能类似于"HELLO\r ". 回车将光标移动到行首。

于 2012-10-02T14:30:56.967 回答
0

输入文件中的行如何终止?

如果您使用的是 Windows 行尾转换,也就是说,您也必须在 switch\r\n中跳过。\r

于 2012-10-02T14:32:04.267 回答
0

该文件具有 CR ( '\r') 字符,您将它们放在子字符串的末尾。

于 2012-10-02T14:30:43.270 回答