为什么"string"在C语言中被认为是"constant"?
Why "string" is considered a "constant" in C language?
为什么"string"在C语言中属于常量范畴?即使它没有与之关联的数值,也不像 "character constant" 具有与之关联的固定整数值(ASCII 值)。
在什么参考文献中,字符串被视为 C 语言中的常量?
因为它是一个字面量,而且字面量应该是不可变的。
考虑一个例子
char *s = "Shubhamdubey2111";
char name[strlen( s ) + 1];
strcpy( name, s );
//...
*s = 'C';
//...
if ( strcmp( name, "Shubhamdubey2111" ) == 0 )
{
// Oops! Do not trust your eyes!
}
字符串文字存储在进程的初始化只读内存区域中。这就是原因,字符串字面值不能被修改。
为什么"string"在C语言中属于常量范畴?即使它没有与之关联的数值,也不像 "character constant" 具有与之关联的固定整数值(ASCII 值)。 在什么参考文献中,字符串被视为 C 语言中的常量?
因为它是一个字面量,而且字面量应该是不可变的。
考虑一个例子
char *s = "Shubhamdubey2111";
char name[strlen( s ) + 1];
strcpy( name, s );
//...
*s = 'C';
//...
if ( strcmp( name, "Shubhamdubey2111" ) == 0 )
{
// Oops! Do not trust your eyes!
}
字符串文字存储在进程的初始化只读内存区域中。这就是原因,字符串字面值不能被修改。