Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-将文本中的值存储到数组中_C_Arrays_File_Text_Io - Fatal编程技术网

C-将文本中的值存储到数组中

C-将文本中的值存储到数组中,c,arrays,file,text,io,C,Arrays,File,Text,Io,我试图逐行存储从文件中获取的不同值。文本文件中的行读取如下所示 100000,player1,long title name 300000,someotherplayer,another long title name 45512845,thisplayer,one more long title name 我想将逗号分隔的每个值存储为三个不同的数组,(int)number,(str)player_name,(str)title_name 下面我有一些代码,但它没有编译 ptr_file=fo

我试图逐行存储从文件中获取的不同值。文本文件中的行读取如下所示

100000,player1,long title name
300000,someotherplayer,another long title name
45512845,thisplayer,one more long title name
我想将逗号分隔的每个值存储为三个不同的数组,(int)number,(str)player_name,(str)title_name

下面我有一些代码,但它没有编译

ptr_file=fopen("text.txt", "r");
char buffer[1000];
int line;
line = 0;

while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){
    char number[line]=strtok(buffer, ",");  
    char player_name[line]=strtok(NULL, ",");
    char title_name[line]=strtrok(NULL, ",");
}

有人能给我一些建议吗?

函数strtok返回一个指针,所以应该是

char* p = strtok(...)

检查参考

因此,您的代码有几个问题

你在模式“o”下打开文件,我不确定它是什么,我怀疑你想要“r” strtok返回一个不能分配给char[]的char*。 在第二次循环中,您将覆盖缓冲区中的数据。 我会这样做:

struct player {
    int number;
    char player_name[64];
    char title_name[256];
};

int main(void) {
    FILE *ptrfile=fopen("text.txt", "r");
    char buffer[1000];
    int line;
    struct player players[16];
    line = 0;
    if(ptrfile==NULL) return 0;
    while(fgets(buffer, sizeof(buffer), ptrfile) != NULL){
        if(strcmp(buffer, "") == 0) return 0;
        char *number=strtok(buffer, ",");
        char *player_name=strtok(NULL, ",");
        char *title_name=strtok(NULL, ",");
        players[line].number=atoi(number);
        strcpy(players[line].player_name, player_name);
        strcpy(players[line].title_name, title_name);;
        line++;
    }
    fclose(ptrfile);
    return 0
}

这是我做的事情,和你似乎在做的事情很相似。您将发现的问题是,您希望将每个值都变成一个char*,但必须对每个值进行malloc,然后才能将这个char*连接到数组中。用数字做这件事也会更容易,以后再把它们转换成int

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

    int main()
    {
        char *msg[100]; 
        char temp[100];
        int length, i;
        int num = 0;


        while((scanf("%s", &temp[0]) != EOF))
        {
            length = strlen(temp);
            msg[num] = malloc((length+1 )* sizeof(char));
            strcpy(msg[num], temp);
            num++;
        }

        printf("There are %d words in the this input.\n", num);

        for(i = 0; i < num; i++)
        {
            printf("%s\n", msg[i]);
        }
        return 0;
    }
#包括
#包括
#包括
int main()
{
char*msg[100];
炭温度[100];
int长度,i;
int num=0;
while((scanf(“%s”,&temp[0])!=EOF))
{
长度=标准长度(温度);
msg[num]=malloc((长度+1)*sizeof(字符));
strcpy(消息[num],温度);
num++;
}
printf(“此输入中有%d个字。\n”,num);
对于(i=0;i

malloc的问题是,你必须让每一个单词都是唯一的,因为单词的大小都不一样。我知道这个示例并不完全是您所做的,但它会让您朝着正确的方向前进。

那么编译器错误是什么?您是否忘记了变量声明中的*before标识符?“o”是错误的,但它是运行时错误。ptrfile和ptr_文件肯定是编译时错误。循环的内容是某种形式的。正式地说,你应该检查内存分配,或者说你忽略了错误检查。正式地说,你应该检查内存分配,或者说你忽略了错误检查。