我目前正在编写一个小程序,但在编译时我不断收到此错误
错误:空字符常量
我意识到这是因为我试图用空白空间替换有效的字符,c[i]=''
但我无法找到另一种表示它的方法。
您可以使用c[i]= '\0'
或简单地使用c[i] = (char) 0
.
null/empty char 只是一个零值,但也可以表示为带有转义零的字符。
你不能在一个字符中存储“无字符”——这没有意义。
作为替代方案,您可以存储一个对您具有特殊含义的字符 - 例如 null char '\0'
- 并特别对待它。
空白字符将是' '
. 如果您正在寻找 null 那将是'\0'
.
是的,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
。
没有“空字符”这样的东西''
。
如果您需要一个空格字符,它可以表示为一个空格:c[i] = ' '
或它的 ASCII 八进制等效值:c[i] = '\040'
。如果你需要一个 NUL 字符,那就是c[i] = '\0'
.
要表示该值不存在的事实,您有两种选择:
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,否则将拥有普通字符。
有两种方法可以执行相同的指令,即空字符串。第一种方法是在静态内存上分配一个空字符串:
char* my_variable = "";
或者,如果你想明确:
char my_variable = '\0';
上面发布的方式仅适用于角色。而且,第二种方式:
#include <string.h>
char* my_variable = strdup("");
不要忘记将free()与这个一起使用,因为strdup()在内部使用malloc。
在字符串中分配一个 null 而不是显式地将某个索引设为 null char 可能很有用'\0'
。我用它来测试处理字符串的函数,确保它们保持在适当的范围内。
和:
char test_src[] = "fuu\0foo";
这将创建一个大小为 8 的数组,其中包含以下值:
{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}
String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;
String after = before.replaceAll(" ", "").replace('\t', '\0');
表示在=“单词”之后
这是单引号和双引号具有不同含义的情况。
""
(const char[1])""
由编译器翻译成。这使您可以在字符数组的初始化中使用它。
''
不是,而是一个未终止的空字符串。因为你不能在不终止它的情况下判断一个字符串是否为空,所以这不是有效的代码。因此错误。
你几乎肯定想做
c[i] = '\0';
如果c
确实是一个文本字符串,这会将字符串的长度设置为 i,方法是在该字符上终止它。
如果c
实际上不是作为文本字符串,那仍然是您应该用来表示那里什么都没有的值,因为它是假的,而任何其他字符都是真的。
如果你真的想在那里放一个空间,那么你想要
c[i] = ' ';