如何表示空char?

时间:2013-08-23 19:12:51

标签: c

我目前正在编写一个小程序,但在编译时我一直收到此错误

  

错误:空字符常量

我意识到这是因为我正在尝试用空格c[i]=''替换有效字符,但我无法找到另一种表示它的方法。

10 个答案:

答案 0 :(得分:90)

您可以使用c[i]= '\0'或仅使用c[i] = (char) 0

null / empty char只是一个零值,但也可以表示为带有转义零的字符。

答案 1 :(得分:21)

你不能在角色中存储“没有角色” - 这没有意义。

作为替代方案,您可以存储对您有特殊意义的字符 - 例如null char '\0' - 并特别对待它。

答案 2 :(得分:10)

空格char将是' '。如果您正在寻找'\0'的空值。

答案 3 :(得分:8)

是的,c[i]=''不是有效代码。我们在' '之间的括号字符常量,例如c[i] = 'A'; char A。但你不在''之间写任何字符。

空的空间只不过是假设你想要分配空间,那么就这样做:

c[i] = ' ';
//      ^  space 

如果想要分配nul char,请执行:

c[i] = '\0';
//       ^ null symbol 

示例:如果您有一个字符串,假设c[]字符串(nul \0终止了char数组)。例如:

char c[10] = {'a', '2', 'c', '\0'};

用空格替换第二个字符

c[1] = ' ';

如果您使用printf打印它,如下所示:

printf("\n c: %s", c);

然后输出将是:

  c:  a  c
//      ^ space printed 

用'\ 0'替换第二个字符

c[1] = '\0';

然后输出将是:

  c:  a

因为字符串以\0终止。

答案 4 :(得分:5)

没有“空角色”''这样的东西。

如果需要空格字符,可以表示为空格:c[i] = ' '或其ASCII八进制等效项:c[i] = '\040'。如果你需要一个c[i] = '\0'的NUL字符。

答案 5 :(得分:4)

为了表示该值不存在的事实,您有两个选择:

1)如果整个char范围有意义并且您无法保留任何值,请使用char*代替char

char** c = new char*[N];
c[0] = NULL; // no character
*c[1] = ' '; // ordinary character
*c[2] = 'a'; // ordinary character
*c[3] = '\0' // zero-code character

然后,如果字符不存在,您将c[i] == NULL,而普通字符则为*c[i]

2)如果您不需要char中可表示的某些值,则保留一个值以表示该值不存在,例如'\0'个字符。

char* c = new char[N];
c[0] = '\0'; // no character
c[1] = ' '; // ordinary character
c[2] = 'a'; // ordinary character

然后,当角色不存在时,您将拥有c[i] == '\0',否则将获得普通角色。

答案 6 :(得分:2)

在字符串中指定null可能很有用,而不是显式地将某个索引设为null char react-redux。我已经将它用于测试处理字符串的函数,以确保它们保持在适当的范围内。

使用:

'\0'

这将创建一个大小为8的数组,其值为:

char test_src[] = "fuu\0foo";

答案 7 :(得分:2)

执行相同指令的方法有两种,即一个空字符串。第一种方法是在静态内存上分配一个空字符串:

char* my_variable = "";

或者,如果您想露骨:

char my_variable = '\0';

以上发布的方式仅适用于角色。 而且,第二种方式:

#include <string.h>
char* my_variable = strdup("");

不要忘了与此同时使用 free() ,因为 strdup()使用 malloc

答案 8 :(得分:0)

String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;

其中EMPTY_SPACE =“”(这是字符串)TAB ='\ t'(这是字符)

String after = before.replaceAll(" ", "").replace('\t', '\0');

表示在=“ word”

之后

答案 9 :(得分:0)

这是单引号和双引号含义不同的情况。

"" 被编译器翻译成 (const char[1])""。这让您可以在字符数组的初始化中使用它。

'' 不是,而是一个未终止的空字符串。因为不终止就无法判断字符串是否为空,所以这不是有效代码。因此出现错误。

你几乎肯定想做

c[i] = '\0';

如果 c 确实是一个文本字符串,这会将字符串的长度设置为 i,方法是在该字符处终止它。

如果 c 实际上不是用作文本字符串,那仍然是您应该用来表示没有任何内容的值, 因为它是假的,并且任何其他字符都是真的。

如果你真的想在那里放一个空格,那么你想要

c[i] = ' ';