检查字符串是否可以在 C 中改变

标签 c arrays string constants

假设我有这个功能:

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/

相关文章:

c++ - 为什么不能像这样复制 char 数组 charArray ="some string";

c - 原始堆字符串

javascript - 如何编写JS函数从字符串中删除某些符号数组

php - 在 PHP 中使用整数过滤数组值

java - 每个字母之间的字符

c - 为 GLFW3 编写 make 文件

c - 在 C 中 move 实现

javascript - 如何过滤具有相同名称但不同值的项目的数组?

c# - 时间跨度字符串格式

c++ - 无法弄清楚如何在 C++ 中的字符串或字符串流中找到空格