我有一个函数,它接受一个char数组并在表中搜索该特定字符,它是相应的值。我正在使用fgets从用户输入中搜索char,当我将缓冲区传递给lookUp函数时,它包含了null终止字符,这会导致问题,因为lookUp正在查找字符+ null终止符。我的问题是,有没有办法'剥离'它的空数字终结符的字符数组,或者可能有不同的方法来处理这个?感谢。
//lookUp function
//This function was provided for us, we cannot change the arguments passed in.
Symbol* lookUp(char variable[]){
for (int i=0; i < MAX; i++){
if (strcmp(symbols[i].varName, variable)==0){
Symbol* ptr = &symbols[i];
return ptr;
}
}
return NULL;
}
//main
int main(){
char buffer[20];
Symbol *symbol;
printf("Enter variable to lookup\n");
while (fgets(buffer, sizeof(buffer), stdin)!= NULL){
printf("buffer is : %s\n", buffer);
int i = strlen(buffer);
printf("length of buffer is %d\n", i);
symbol = lookUp(buffer);
printf("Passed the lookup\n");
if (symbol == NULL){
printf("Symbol is null\n");
}
}
}
输出,符号在此不应为null。
Enter variable to lookup
a
buffer is : a
length of buffer is: 2 //this should only be 1
Passed the lookup
Symbol is null
答案 0 :(得分:2)
不,这不是终止NUL
字符。如果您已阅读strlen()
的手册,您将了解到在计算长度时它不包括终止零字节。 换行符 fgets()
附加到字符串的末尾。您可以通过用NUL字节替换它来剥离它:
char *p = strchr(buffer, '\n');
if (p != NULL) {
*p = 0;
}
答案 1 :(得分:1)
fgets()会保留换行符(如果有的话)。你想删除它。一种方法是:
while (fgets(buffer, sizeof(buffer), stdin)!= NULL){
char *p = strchr(buffer, '\n'); // new code
if(p) *p = 0; // new code
printf("buffer is : '%s'\n", buffer);
int i = strlen(buffer);
printf("length of buffer is %d\n", i);