读取 C 中的一行并将其拆分
Read a line in C and split it
我在尝试将 'str' 拆分为 2 个 int 变量和 1 个 char 变量时遇到问题。这是一个代码:
FILE *fp;
int i,j;
char str[8];
char valor;
if(!(fp = fopen("miniflota_g.dat","rb"))){
printf("Error opening file.");
getch();
return;
}
while(fread(str,sizeof(str),1,fp) == 1){
sscanf(str,"%d %d %c",i,j,valor);
printf("%d %d %c",i,j,valor);
}
fclose(fp);
这是一个错误:
感谢您的帮助。
你永远不会空终止 'str' 所以 sscanf 可以读取结尾。
您需要将输出变量的地址而不是值传递给 sscanf。 (例如 &i
而不是 i
)。
如果您启用编译器警告(-Wall with gcc),您的编译器至少会警告您第二点。
sscanf() 仅适用于标准 C 0 终止字符串。 fread() 不会在读取的内容后附加 0。如果要读取 8 个字节并使用 sscanf(),则需要先以 0 终止数据。所以你的数组需要至少 9 个字节大,所以你可以在数据后附加一个 0。
还需要将变量地址传递给它,这样它才能写入它们。
所以它看起来应该更像这样:
FILE *fp;
int i,j;
char str[9] = { 0 };
char valor;
if(!(fp = fopen("miniflota_g.dat","rb"))){
printf("Error opening file.");
getch();
return;
}
while(fread(str,sizeof(str)-1,1,fp) == 1){
sscanf(str,"%d %d %c",&i,&j,&valor);
printf("%d %d %c",i,j,valor);
}
fclose(fp);
我在尝试将 'str' 拆分为 2 个 int 变量和 1 个 char 变量时遇到问题。这是一个代码:
FILE *fp;
int i,j;
char str[8];
char valor;
if(!(fp = fopen("miniflota_g.dat","rb"))){
printf("Error opening file.");
getch();
return;
}
while(fread(str,sizeof(str),1,fp) == 1){
sscanf(str,"%d %d %c",i,j,valor);
printf("%d %d %c",i,j,valor);
}
fclose(fp);
这是一个错误:
感谢您的帮助。
你永远不会空终止 'str' 所以 sscanf 可以读取结尾。
您需要将输出变量的地址而不是值传递给 sscanf。 (例如
&i
而不是i
)。如果您启用编译器警告(-Wall with gcc),您的编译器至少会警告您第二点。
sscanf() 仅适用于标准 C 0 终止字符串。 fread() 不会在读取的内容后附加 0。如果要读取 8 个字节并使用 sscanf(),则需要先以 0 终止数据。所以你的数组需要至少 9 个字节大,所以你可以在数据后附加一个 0。
还需要将变量地址传递给它,这样它才能写入它们。
所以它看起来应该更像这样:
FILE *fp;
int i,j;
char str[9] = { 0 };
char valor;
if(!(fp = fopen("miniflota_g.dat","rb"))){
printf("Error opening file.");
getch();
return;
}
while(fread(str,sizeof(str)-1,1,fp) == 1){
sscanf(str,"%d %d %c",&i,&j,&valor);
printf("%d %d %c",i,j,valor);
}
fclose(fp);