笔画空间使用 buffer/dynamic 内存
Strok spaces using buffer/dynamic memory
我如何在从缓冲区读取数据时在空格处进行 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;
}
这将在文件的每一行读取 1、2 或 3 个数字。它使用 sscanf
中的 return 值来查看从每一行读取了多少数字。当然,如果有流氓非数值数据,那就乱了。
#include <stdio.h>
int main(void)
{
FILE *fp;
int a, b, c;
int res;
char str [100];
if ((fp = fopen("file.txt", "rt")) == NULL)
return 1;
while(fgets(str, sizeof str, fp) != NULL) {
res = sscanf(str, "%d%d%d", &a, &b, &c);
if (res == 3)
printf ("3 values %d %d %d\n", a, b, c);
else if (res == 2)
printf ("2 values %d %d\n", a, b);
else if (res == 1)
printf ("1 value %d\n", a);
else
printf ("0 values\n");
}
fclose(fp);
return 0;
}
文件内容:
1 23 50
45 50 30
2 15 30
10 20
100
程序输出:
3 values 1 23 50
3 values 45 50 30
3 values 2 15 30
2 values 10 20
0 values
1 value 100
我如何在从缓冲区读取数据时在空格处进行 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;
}
这将在文件的每一行读取 1、2 或 3 个数字。它使用 sscanf
中的 return 值来查看从每一行读取了多少数字。当然,如果有流氓非数值数据,那就乱了。
#include <stdio.h>
int main(void)
{
FILE *fp;
int a, b, c;
int res;
char str [100];
if ((fp = fopen("file.txt", "rt")) == NULL)
return 1;
while(fgets(str, sizeof str, fp) != NULL) {
res = sscanf(str, "%d%d%d", &a, &b, &c);
if (res == 3)
printf ("3 values %d %d %d\n", a, b, c);
else if (res == 2)
printf ("2 values %d %d\n", a, b);
else if (res == 1)
printf ("1 value %d\n", a);
else
printf ("0 values\n");
}
fclose(fp);
return 0;
}
文件内容:
1 23 50
45 50 30
2 15 30
10 20
100
程序输出:
3 values 1 23 50
3 values 45 50 30
3 values 2 15 30
2 values 10 20
0 values
1 value 100