C 传递字符数组,但不包括空终止字符
我有一个函数,它接受一个字符数组,并在表中搜索该字符及其对应的值。我使用fgets从用户输入中获取要搜索的字符,当我将缓冲区传递给lookUp函数时,它包含了null终止字符,这导致了问题,因为lookUp正在查找字符+null终止符。我的问题是,有没有一种方法可以“剥离”一个字符数组的空终止符,或者有没有另一种方法来处理这个问题?谢谢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
//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;
}