c - 使用缓冲区/动态内存的笔划空间

标签 c arrays pointers dynamic strtok

我如何在从缓冲区读取数据时在空格处进行 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/

相关文章:

c++ - 如何为matlab设置C/C++编译器?

java - 查找数组中的模数

C 结构初始化 - 有趣

c - 如何在 linux 中为我现有的 C 程序创建头文件以连接 MySql?

C编程阶乘输出错误值

javascript - 字典多项选择

c - 确定数组中的最大值

c - 为什么 malloc 和 free 有不同的返回类型?

c - 如何获取指针指向的内存位置的地址

c++ - 链表中修改的数据不会反射(reflect)在内存中