【问题标题】:Printing a string with null characters in it打印一个包含空字符的字符串
【发布时间】:2012-10-13 07:22:44
【问题描述】:

我将一个带有空格的字符串作为输入,并将空格替换为 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;
}

这有什么问题?

【问题讨论】:

  • a[i] == " "a[i] == ' ' 不同。
  • 请养成使用调试信息和启用所有警告进行编译的习惯。如果你在 linux 上使用 gcc -Wall -g 编译,你会得到一个警告来帮助你发现你的错误。
  • @DCoder 您应该将其发布为答案。

标签: c string null-character


【解决方案1】:

您的代码错误。

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';
}

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多