【发布时间】:2013-10-08 00:01:40
【问题描述】:
基本要点是,我从文本文件中读取单词,将它们存储为字符串,运行一个函数,然后循环多次,每读取一个新行就重写该字符串。这个循环完成后,我需要处理一个不同的字符串。问题是,第二个字符串的字节,即使我在声明时将它们设置为 0,也会被比我分配给第一个字符串的空间更长的单词中的额外字母覆盖:
char* currDictWord = malloc(9*(sizeof(char));
char* currBrutWord = malloc(9*(sizeof(char));
memset(currBrutWord, 0, 9);
memset(currDictWord, 0, 9);
...
while (stuff) {
fscanf(dictionary, "%s", currDictWord);
}
...
printf("word: %s\n", currBrutWord);
currBrutWord 将不再为空。我处理此问题的两种方法是确保 currDictWord 比字典文件中最长的单词长(一种贫民窟解决方案),并在循环后对 currBrutWord 执行新的 memset。有没有办法告诉 C 停止将内容写入我专门为不同变量分配的内存中?
【问题讨论】:
-
分配更多空间?使用比
fscanf更明智的功能?只需编写符合您要求的代码即可。
标签: c memory malloc overwrite scanf