C 无法将字符串保存到指向数组的指针中
我试图将某些单词保存到指向数组(**valid_words)的指针中,但遇到了一个我不理解的问题。下面是我试图使用的函数,最终的结果是根据iline和dline相等的条件,使有效_字包含所有有效字C 无法将字符串保存到指向数组的指针中,c,string,file,pointers,io,C,String,File,Pointers,Io,我试图将某些单词保存到指向数组(**valid_words)的指针中,但遇到了一个我不理解的问题。下面是我试图使用的函数,最终的结果是根据iline和dline相等的条件,使有效_字包含所有有效字 void CheckFile(char *input_file, char *dictionary_file, char *output_file, char **valid_words) { /* Open files as read or append */ FILE *input
void CheckFile(char *input_file, char *dictionary_file, char *output_file, char **valid_words)
{
/* Open files as read or append */
FILE *input, *dictionary, *output;
input = fopen(input_file, "r");
dictionary = fopen(dictionary_file, "r");
output = fopen(output_file,"a");
int word_count = 0;
/* Read from files */
if (input != NULL && dictionary!= NULL)
{
char *iline = malloc(MAXSIZE*sizeof(char));
char *dline = malloc(MAXSIZE*sizeof(char));
while (fgets (iline, sizeof iline, input) != NULL)
{
while (fgets (dline, sizeof dline, dictionary) != NULL)
{
trimwhitespace(iline);
trimwhitespace(dline);
if (strcasecmp(iline, dline) == 0 )
{
fprintf(output, "%s\n",iline);
valid_words[word_count] = iline;
printf("Word Count: %d\n", word_count);
printf("At Zero: %s\n", valid_words[0]);
printf("Valid Word: %s\n", valid_words[word_count]);
printf("Actual Word: %s\n", iline);
word_count++;
}
}
rewind(dictionary);
}
fclose(input);
fclose(dictionary);
fclose(output);
free(iline);
free(dline);
}
else
{
printf("An error has occured\n");
}
}
我得到的电流输出是
Word Count: 0
At Zero: miles
Valid Word: miles
Actual Word: miles
Word Count: 1
At Zero: limes
Valid Word: limes
Actual Word: limes
Word Count: 2
At Zero: smile
Valid Word: smile
Actual Word: smile
Word Count: 3
At Zero: slime
Valid Word: slime
Actual Word: slime
我期望在零:总是输出“英里”,但这并没有发生。
调用该函数后,打印有效的_字[i]将不打印任何内容。
如果有人能帮助我,我会非常感激的,而且我非常愿意接受任何批评。您可以在这里找到完整的实现
谢谢。为什么它不起作用的答案是-
valid_words[word_count] = iline;
在确保有效单词
中的元素最多可容纳MAXSIZE
个字符后,应使用strcpy
,或者在确保第一个(真正的第零个)字符后使用strncpy
(注意:不是strncpy
)您要插入的有效单词中的元素中的字符是'\0'
一些意见:
假设MAXSIZE
是一个#define
d常量,这样更好-
char iline[MAXSIZE];
char dline[MAXSIZE;
而不是您所拥有的malloc调用(顺便说一句,sizeof(char)定义为一个)
同样,最好将CheckFile
的最后一个参数更改为char valid_words[][MAXSIZE]
(从而更改对CheckFile
的所有调用中的参数)
希望这有帮助。为什么它不起作用的答案是-
valid_words[word_count] = iline;
在确保有效单词
中的元素最多可容纳MAXSIZE
个字符后,应使用strcpy
,或者在确保第一个(真正的第零个)字符后使用strncpy
(注意:不是strncpy
)您要插入的有效单词中的元素中的字符是'\0'
一些意见:
假设MAXSIZE
是一个#define
d常量,这样更好-
char iline[MAXSIZE];
char dline[MAXSIZE;
而不是您所拥有的malloc调用(顺便说一句,sizeof(char)定义为一个)
同样,最好将CheckFile
的最后一个参数更改为char valid_words[][MAXSIZE]
(从而更改对CheckFile
的所有调用中的参数)
希望这有帮助。这看起来不那么热:iline的大小
。你想让它变成指针的大小吗?这同样适用于dline
@WhozCraig我希望iline和dline指向一个包含六个字符的字符串,现在MAXSIZE被定义为六个字符。因此,如果我的思维过程是正确的,我应该为iline和dline保留六个字节;不是它所指的大小。同样,对于数据线的大小
。顺便问一下,字典文本文件的格式是什么,是否只是空格分隔的单词(空格是空格、制表符、换行符等)?我这样问是因为我不相信你的过滤过程会做你认为应该做的事情。嗯。。好的,我将进一步研究sizeof指针,您指的是char-iline=malloc(maxsizesof(char));正确的?此外,我的输入文件和字典文件每行都有一个单词,后跟一个换行符。Ok。这有点重要(关于文件格式的信息)。是的,我指的是动态分配线。还有很多其他的问题我正在打字。这可能需要一些时间,但您提供的指向完整源代码的链接帮助很大。你对如何解决这个问题有正确的想法,只是把它全部搞错了,对指针和变量大小可能会有误解。让我做一会儿。希望你有时间。这看起来不那么热:sizeof iline
。你想让它变成指针的大小吗?这同样适用于dline
@WhozCraig我希望iline和dline指向一个包含六个字符的字符串,现在MAXSIZE被定义为六个字符。因此,如果我的思维过程是正确的,我应该为iline和dline保留六个字节;不是它所指的大小。同样,对于数据线的大小
。顺便问一下,字典文本文件的格式是什么,是否只是空格分隔的单词(空格是空格、制表符、换行符等)?我这样问是因为我不相信你的过滤过程会做你认为应该做的事情。嗯。。好的,我将进一步研究sizeof指针,您指的是char-iline=malloc(maxsizesof(char));正确的?此外,我的输入文件和字典文件每行都有一个单词,后跟一个换行符。Ok。这有点重要(关于文件格式的信息)。是的,我指的是动态分配线。还有很多其他的问题我正在打字。这可能需要一些时间,但您提供的指向完整源代码的链接帮助很大。你对如何解决这个问题有正确的想法,只是把它全部搞错了,对指针和变量大小可能会有误解。让我做一会儿。希望你有一些时间。我想你是说“那么你的malloc()
和free()
调用可以被消除。我是说将它们声明为char数组比[OP]的malloc调用要好。我想你是说“那么malloc()
和free()
可以消除您的调用。我的意思是,将它们声明为char数组比[OP]的malloc调用要好。