这是整个代码,问题出在第25行。如果我用strcpy给出值,代码就可以了。如果我尝试用fgets读取值,则第23行中的strstr不起作用。谢谢你的帮助。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct tk {
char name[60];
} tk;
int main() {
tk* array;
array = (tk*) calloc(1, sizeof(tk));
int k;
char c[60], h[60];
strcpy(array[0].name, "A B");
void find(char *c, tk *array) {
for (k = 0; k < strlen(array[0].name); k++) {
h[k] = tolower(array[0].name[k]);
}
printf("%s %s", array[0].name,c);
if (strstr(h, c) != NULL) printf("1");
}
fgets(c, 60, stdin);
k = 0;
for (k = 0; (k < strlen(c)); k++) {
c[k] = tolower(c[k]);
}
find(c, array);
free(array);
return (0);
}
答案 0 :(得分:1)
fgets从当前流位置读取字符到和 包括第一个换行符,到流的末尾,或 直到读取的字符数等于n - 1,以两者中的任何一个为准 第一
这就是为什么当您使用c
而不是strcpy
设置fgets
时获得匹配。
您可以删除这样的换行符
c [ strcspn(c, "\r\n") ] = 0;
如果没有换行符,则无害。
答案 1 :(得分:0)
在fgets
之后添加此行。从\n
stdin
fgets(c, 60, stdin);
strtok(c, "\n"); // add this statement
从stdin读取后对c
数组进行标记。在此之后应该工作正常。干杯!