我之前已经问过关于字符串函数strstr的问题,结果发现我犯了一个愚蠢的错误。现在我又得到了意想不到的结果,无法理解为什么会这样。我编写的代码只是一个简单的测试代码,以便我能更好地理解它,它采用一个包含11个单词的列表的文本文件,并且我试图找到在其余单词中找到第一个单词的位置。我所做的就是将文本文档单词移动到一个二维字符串数组中,然后选择一些我知道应该返回正确值但却返回NULL的文本。 strstr的第一次使用返回正确的值,但我知道的最后3个包含chant里面的单词chant,返回NULL。如果再一次这只是一个愚蠢的错误我让我道歉,但是在这里理解这个字符串函数的任何帮助都会很棒。
文本文件的格式如下:
chant
enchant
enchanted
hello
enchanter
enchanting
house
enchantment
enchantress
truck
enchants
我编写的代码是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE* file1;
char **array;
int i;
char string[12];
char *ptr;
array=(char **)malloc(11*sizeof(char*));
for (i=0;i<11;i++) {
array[i]=(char *)malloc(12*sizeof(char));
}
file1=fopen(argv[1],"r");
for (i=0;i<11;i++) {
fgets(string,12,file1);
strcpy(array[i],string);
}
ptr=strstr(array[1],array[0]);
printf("\nThe two strings chant and %s yield %s",array[1],ptr);
ptr=strstr(array[2],array[0]);
printf("\nThe two strings chant and %s yield %s",array[2],ptr);
ptr=strstr(array[4],array[0]);
printf("\nThe two strings chant and %s yield %s",array[4],ptr);
ptr=strstr(array[5],array[0]);
printf("\nThe two strings chant and %s yields %s",array[5],ptr);
return 0;
}
答案 0 :(得分:1)
摆脱\n
之后的fgets()
结尾。
for (i=0;i<11;i++) {
fgets(string, sizeof string, file1);
size_t len = strlen(string);
if (len > 0 && string[len-1] == '\n') string[--len] = '\0';
strcpy(array[i], string);
}
答案 1 :(得分:1)
char *chomp(char *str){
char *p = strchr(str, '\n');
if(p)
*p = '\0';
return str;
}
...
strcpy(array[i], chomp(string));