char * 设置为字符串文字时的编译器警告

标签 c char constants

在我的代码中有

char* s = strchr(first,'/');
if(s==NULL) s = "";
else s = s+1;

但是我的 gcc 编译器在倒数第二行提示

warning: assignment discards qualifiers from pointer target type

据我对 ANSI C 的了解,这是因为我将 s(非常量值)设置为字符串文字(常量值)。 (我在这里错了吗?)但是我需要 s 是非常量(因为我可能通过向它加 1 来更改它的值),而且我还需要将 s 设置为空字符串文字。在更好的代码设计方面,我是否有任何选择来实现这两个目标而无需编译器大喊大叫?

我确实启用了 -Wwrite-strings 标志。

最佳答案

如果你想写:

char * s = "Red";
if (Massachusetts) {
   s = "Blue";
}

然后只需添加常量。它会正常工作。

如果你真的需要修改字符串,那么

char *s = malloc(64);
strcpy (s, "Red");
if (Massachusetts) {
    strcat(s, "-not");
}

关于char * 设置为字符串文字时的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8961338/

相关文章:

c++ - 获取对 typeid() 对象的引用?

c++ - 在 C++ 中声明一个 const int 数组

尝试从结构打印时出现编译器错误

c - 链接列表,卡在文件管理上

c - 了解由于 getchar 而导致的 c 循环

Java String indexOf 忽略重复字符

子进程和父进程之间的通信

c - 如何仅在 C 中更新打印输出中的值?

java - 为什么这不打印单词的最后一个字符?

c++ - 如何在 C++ 中将 const int 设置为最大值?