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_文件肯定是编译时错误。循环的内容是某种形式的。正式地说,你应该检查内存分配,或者说你忽略了错误检查。正式地说,你应该检查内存分配,或者说你忽略了错误检查。