我如何在从缓冲区读取数据时在空格处进行 strtok?如果我的文本文件包含
1 23 50
45 50 30
2 15 30
我决定用下面的代码打印数组,它将逐行打印。我如何扩展它以进一步将数组划分为数组的每个索引的单独数字?例如。
1
23
50 等...
我试过使用 strtok,但我一直出现段错误,而且我不确定在哪里修复它。
FILE * fp;
char buffer[5000];
int size = 0;
char **entireFile = NULL;
fp = fopen("file.txt","r");
entireFile = malloc(sizeof(buffer) * sizeof(char*));
while (fgets(buffer,5000,fp)!= NULL)
{
entireFile[size] = malloc(strlen(buffer)+1);
strcpy(entireFile[size],buffer);
size++;
}
最佳答案
I want entireFile[0] = 1, entireFile1 = 23
这可以使用 fscanf 轻松完成。 Here是扫描输入的一个很好的引用。
#include <stdio.h>
int main(){
FILE *in = fopen("in.txt" , "r");
int hold;
/* Won't actually store values, but can be used for
value manipulation inbetween */
while ( fscanf(in, "%d", &hold) != EOF ){
printf("Scanned in %d\n", hold);
}
fclose(in);
return 0;
}
如果您希望以数组形式使用它,请添加一个递增整数并将保留更改为数组。
#include <stdio.h>
int main(){
FILE *in = fopen("in.txt" , "r");
int hold[100], i=0; // Hold a maximum of 100 integers
while ( fscanf(in, "%d", &hold[i]) != EOF ){
printf("Scanned in %d\n", hold[i++]);
}
fclose(in);
return 0;
}
你也可以像这样进行动态内存分配:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
FILE *in = fopen("in.txt", "r");
int i=0, j;
char* fragments[2000];
char entry[100];
while ( fscanf(in, "%s", &entry[i]) != EOF ){
fragments[i] = malloc(sizeof(char) * (1 + strlen(entry)));
strcpy(fragments[i], &entry[i]);
i++;
}
for ( j = 0; j < i; j++ ){
printf("%s\n", fragments[j]);
}
fclose(in);
return 0;
}
关于c - 使用缓冲区/动态内存的笔划空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851582/