C 传递字符数组,但不包括空终止字符

C 传递字符数组,但不包括空终止字符,c,string,char,C,String,Char,我有一个函数,它接受一个字符数组,并在表中搜索该字符及其对应的值。我使用fgets从用户输入中获取要搜索的字符,当我将缓冲区传递给lookUp函数时,它包含了null终止字符,这导致了问题,因为lookUp正在查找字符+null终止符。我的问题是,有没有一种方法可以“剥离”一个字符数组的空终止符,或者有没有另一种方法来处理这个问题?谢谢 //lookUp function //This function was provided for us, we cannot change the argu

我有一个函数,它接受一个字符数组,并在表中搜索该字符及其对应的值。我使用fgets从用户输入中获取要搜索的字符,当我将缓冲区传递给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");
       }
   }
}

如果有换行符,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);

不,这不是关于终止NUL字符的问题。如果你读过strlen的手册,你就会知道在计算长度时,它不包括终止的零字节。它是fgets附加到字符串末尾的换行符。您可以通过将其替换为NUL字节来去除它:

char *p = strchr(buffer, '\n');
if (p != NULL) {
    *p = 0;
}
char *p = strchr(buffer, '\n');
if (p != NULL) {
    *p = 0;
}