一个人如何代表空的字符?
我目前正在编写一个小程序,但编译时不断收到此错误
错误:空字符常量
我意识到这是因为我试图用空的空间c[i]=''
replace一个有效的字符,但是我一直没能find另一种方式来表示它。
你可以使用c[i]= '\0'
或简单地使用c[i] = (char) 0
。
空/空字符只是一个零值,但也可以表示为具有转义零的字符。
你不能在一个字符中存储“无字符” – 这是没有意义的。
作为替代,你可以存储一个对你有特殊意义的字符 – 例如null char '\0'
– 并且特别对待它。
空格字符将是' '
。 如果你正在寻找null将是'\0'
。
是的, c[i]=''
不是有效的代码。 我们在'
'
之间插入字符常量,例如c[i] = 'A';
char A
但是你不会在''
之间写任何字符。
空的空间不过是假设如果你想分配空间,然后做:
c[i] = ' '; // ^ space
如果要分配nul char
然后做:
c[i] = '\0'; // ^ null symbol
例如:如果你有一个string,假设如果c[]
一个string(nul \0
终止字符数组)。 例如:
char c[10] = {'a', '2', 'c', '\0'};
而你用空格replace第二个字符 :
c[1] = ' ';
如果使用printf打印它如下:
printf("\nc: %s", c);
那么输出将是:
c: ac // ^ space printed
而你用'\ 0'replace第二个字符 :
c[1] = '\0';
那么输出将是:
c: a
因为string以\0
结尾。
没有“空白字符”这样的东西。
如果你需要一个空格字符,可以表示为一个空格: c[i] = ' '
或ASCII八进制等效字符: c[i] = '\040'
。 如果你需要一个NUL字符,那就是c[i] = '\0'
。
为了表示价值不存在的事实,你有两个select:
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] == NULL
。
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'
,否则就是普通字符。
在string中分配一个null可能是有用的,而不是显式地使一些索引为null char '\0'
。 我用它来testing处理string的函数,以确保它们保持在合适的范围内。
附:
char test_src[] = "fuu\0foo";
这将创build一个值为8的数组:
{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}