105

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

错误:空字符常量

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

4

10 回答 10

165

您可以使用c[i]= '\0'或简单地使用c[i] = (char) 0.

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

于 2013-08-23T19:14:01.153 回答
35

你不能在一个字符中存储“无字符”——这没有意义。

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

于 2013-08-23T19:16:00.157 回答
15

空白字符将是' '. 如果您正在寻找 null 那将是'\0'.

于 2013-08-23T19:14:11.510 回答
10

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

空的空间不过是假设如果你想分配空间然后做:

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

如果想分配nul char然后做:

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

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

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

于 2013-08-23T19:15:01.000 回答
5

没有“空字符”这样的东西''

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

于 2013-08-23T19:19:32.093 回答
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'然后,当字符不存在时,您将拥有for,否则将拥有普通字符。

于 2013-08-23T19:16:15.863 回答
4

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

char* my_variable = "";

或者,如果你想明确:

char my_variable = '\0';

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

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

不要忘记将free()与这个一起使用,因为strdup()在内部使用malloc

于 2018-10-27T05:02:30.897 回答
2

在字符串中分配一个 null 而不是显式地将某个索引设为 null char 可能很有用'\0'。我用它来测试处理字符串的函数,确保它们保持在适当的范围内。

和:

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

这将创建一个大小为 8 的数组,其中包含以下值:

{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}
于 2017-03-15T21:58:49.660 回答
0

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

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

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

表示在=“单词”之后

于 2020-11-03T05:41:17.433 回答
0

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

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

''不是,而是一个未终止的空字符串。因为你不能在不终止它的情况下判断一个字符串是否为空,所以这不是有效的代码。因此错误。

你几乎肯定想做

c[i] = '\0';

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

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

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

c[i] = ' ';
于 2021-04-01T15:45:39.377 回答