arrays - strtok 大小 1 的读取无效

标签 arrays c char file-handling strtok

我正在将文本文件作为 char 数组读取,并使用 strtok 通过空格分隔符分隔值,并将每个分隔的单词放入其自己的子数组中inputArray

这在 CLion 中运行良好,但是如果我通过命令行编译,则会收到错误无效读取大小 1 (Valgrind)。我读过,字符串的末尾需要以 null 结尾,strtok 才能工作,我认为我已经实现了?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *read_string(const char *filename) {
    char *buffer = 0;
    long length;
    FILE *f = fopen(filename, "rb"); //was "rb"

    if (f) {
        fseek(f, 0, SEEK_END);
        length = ftell(f);
        fseek (f, 0, SEEK_SET);
        buffer = (char *)malloc((length + 1) * sizeof(char));
        if (buffer) {
            fread(buffer, sizeof(char), length, f);
            buffer[length] = '\0';
        }
        fclose(f);
    }

    return buffer;
}

int main() {
    char *inputFile = read_string("input file.txt");
    char *inputFile3 = read_string("input file.txt");

    // counts the number of characters in the file to determine size of array to create
    int count1 = 0;
    for (char *p = strtok(inputFile, " "); p != NULL; p = strtok(NULL, " "))
    {
        count1 += 1;
    }

    char *inputArray[count1];

    // creating array of words
    int l = 0;
    for (char *p = strtok(inputFile3, " "); p != NULL; p = strtok(NULL, " "))
    {
        inputArray[l] = p;
        l++;
    }

    return 0;
}

最佳答案

最有可能的错误是您从不包含input file.txt 文件的目录运行程序。

考虑为无法打开文件且 if (f) 条件不满足的情况添加错误处理。在这种情况下,read_string 返回 NULL,此错误应由调用者处理,以告诉用户未找到该文件。

关于arrays - strtok 大小 1 的读取无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75643588/

相关文章:

c - 为什么我使用 fputc 编写的文件不会终止?

c - 如何在C中正确输入字符串

c - 如何编写根据命令行参数将字母转换为大写或小写的程序?

c - 指向结构体的指针 C 中堆栈数据结构的实现

c - 如何将结构体数组传递给函数

c++ - 在函数的输入参数中用 std::string 替换 char 数组

Java 数组将输入与数组匹配

c++ - C++-将元素按升序插入数组时出现段错误

Java:为什么这个4个字符的字符串会创建一个包含6个数据的byte[]?

c++ - 如何将 2 个 char* 数组直接映射到 std::map<std::string,std::string>