我正在将文本文件作为 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/