C 创建数组中所有逗号的索引数组

C 创建数组中所有逗号的索引数组,c,C,我正在尝试创建一个索引数组,该数组将存储从文件中读入的每个“”的位置。我已经编写了代码,它似乎可以工作,但由于某种原因,在文件中的第一行正好超过1',后停止 到底是什么原因使它停止了我想不出来。它只在前两个索引后给出零 #include <stdio.h> #include <stdlib.h> void getCommaIndex(int n,char table[],int index[]){ int i; int p = 0; for(i = 0 ; i <

我正在尝试创建一个索引数组,该数组将存储从文件中读入的每个“”的位置。我已经编写了代码,它似乎可以工作,但由于某种原因,在文件中的第一行正好超过1',后停止

到底是什么原因使它停止了我想不出来。它只在前两个索引后给出零

#include <stdio.h>
#include <stdlib.h>

void getCommaIndex(int n,char table[],int index[]){
int i;
int p = 0;
for(i = 0 ; i < n ; i++){
    if(table[i] == ','){
        index[p] = i;
        p++;
    }
}    
}

int main()
{
char table[100000];
int index[5000];
int i;
FILE *fp;
fp = fopen("C:/Users/Chris/Desktop/Open Frameworks/apps/myApps/bin/data/tableshort.csv","r");

while( !feof(fp)){
    fgets(table,"%s",fp);
    printf("%s",table);
    getCommaIndex(5000,table,index);
}

for(i = 0 ; i < 11 ; i++){
    printf("%d ",index[i]);
}
输出将类似于:

7112035405962670000

我刚刚改变了:

fgets(table,"%s",fp);
致:

一切顺利

见:


另外,您的问题中的代码在我的编译器中给了我以下信息:警告:传递'fgets'的参数2会从指针生成整数,而不进行强制转换。尽量将警告视为错误。

您可以尝试一次读取一行,而不是一次读取整个文件。此外,在getCommaIndex函数表中,[]是100000,但您只迭代前5000个索引。我不清楚,但似乎你的n值应该是100000,所以你可以循环整个表数组。

我认为你不应该这样使用fgets。我在互联网上花了太长时间。我误读了fgets。重新思考你是如何做到这一点的。我认为你对这个问题的看法是错误的。如果您只想从csv文件中获得带编号的输出,可以使用逗号作为分隔符。如果您需要帮助解析带分隔符的字符串,那么上面有很多答案。您确定知道第一行的位置吗?在我看来,你的程序应该打印文件最后一行的位置。是的,这是第一行。那代码会让你觉得最后一行会被打印出来吗?我刚试过这个,在我这方面没有什么区别。。。您如何测试在没有可读取文件的情况下一切都正常工作?我创建了自己的文件,保存了它,并针对它运行了程序。这是我文件的内容:1、2、3、4、5、6、7、8、9、0、A、B、C。另外,请检查您的磁盘是否正常工作。这对我来说也很好。试着在某个地方放一个回车,这样它更像是1,2,3,4,5,6,7,8,a,b,c,d,e,f,g,hWell我不知道如何在评论中显示下一行。。。但我想你明白我的意思了。因此,如果在记事本中打开CSV,它将在第一行显示一些文本,然后在第二行完成。如果使用最简单的编辑器(如MS-DOS编辑器)创建文件,会发生什么情况?是的,我知道这是老派的,但是一些新的编辑喜欢用他们自己的编码格式保存数据。我只是不担心这件事,因为我在前10场比赛中遇到了麻烦,我还不需要一路看完整张桌子。
fgets(table,5000,fp);