假设我有这个功能:
void f(char *s) {
s[0] = 'x';
}
这个函数有时会出错,有时不会。例如,
char *s = "test";
f(s); // Error
char t[] = "test";
f(t); // Success
在函数f
中,是否可以在执行之前判断s[0] = 'x';
是否会出错?
最佳答案
调用者有责任遵守参数可变的函数要求,而不是相反。
const char *s = "test"; // tell compiler s is immutable
f(s); // compilation error since f() requires a non-const argument
char t[] = "test";
f(t); // Success
阻止编译器在上面拒绝 f(s) 的唯一方法是从 s 的声明中删除 const,或者放弃 const'ness。除了极少数情况外,两者都是问题的积极指标。
注意:s 可以在没有 const 限定符的情况下声明,这是语言中的一个异常现象。练习在需要时使用 const(例如,在使用字符串文字初始化指针时)。通过这种方式消除了很多程序错误。
关于检查字符串是否可以在 C 中改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28377294/