-1

我有一个函数,它接收一个 char 数组并在一个表中搜索该特定字符及其对应的值。我正在使用 fgets 从用户输入中搜索要搜索的字符,当我将缓冲区传递给 lookUp 函数时,它包含导致问题的空终止字符,因为查找正在寻找字符 + 空终止符。我的问题是,有没有办法“剥离”它的空终止符的 char 数组,或者是否有不同的方法来处理这个?谢谢。

//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");
       }
   }
}

输出,符号在这里不应为空。

Enter variable to lookup
a
buffer is : a
length of buffer is: 2 //this should only be 1
Passed the lookup
Symbol is null
4

2 回答 2

2

不,这与终止NUL角色无关。如果您阅读过 的手册strlen(),您会了解到它在计算长度时不包括终止零字节。它是附加到字符串末尾的换行符。fgets()您可以通过将其替换为 NUL 字节来去除它:

char *p = strchr(buffer, '\n');
if (p != NULL) {
    *p = 0;
}
于 2013-11-08T17:49:54.767 回答
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);
于 2013-11-08T17:48:36.703 回答