2

我将一个带有空格的字符串作为输入,并将空格替换为 NULL 字符“\0”。当我现在打印字符串时,我只希望第一个 NULL 字符之前的第一个空格之前的部分,但我得到的是原始字符串。

这是代码-

#include<stdio.h>

int main(){
    char a[1000];
    int length, i = 0;
    length = 0;
    scanf("%[^\n]s", a); 
    while(a[i]!='\0')
            i++;
    length = i;
    printf("Length:%d\n", length);
    printf("Before:%s\n", a); 
    for(i=0;i<length;i++){
            if(a[i] == " ")
                    a[i] = '\0';
    }   
    printf("After:%s\n", a); 
    return 0;
}

这有什么问题?

4

1 回答 1

8

你的代码是错误的。

for(i=0;i<length;i++){
        if(a[i] == " ")
                a[i] = '\0';
}   

比较是试图将一个字符与一个指针进行比较(用“”表示->这成为一个指向字符串的指针。在这种情况下,字符串只有一个空格。)这可以通过以下替换来修复

for(i=0;i<length;i++){
        if(a[i] == ' ')
                a[i] = '\0';
}   

或者最好以这种方式进行,因为除了空格之外,您还可以使用其他空格,例如制表符。(请同时包含 ctype.h)

for(i=0;i<length;i++){
           if(isspace(a[i]))
                a[i] = '\0';
}
于 2012-10-13T07:37:49.950 回答