c - 一旦你已经声明了它,你如何在 C 中编辑一个字符串?
问题描述
提前感谢您的帮助。我正在用 C 语言编写一个简单的程序,并且已经声明了两个名为“message1”和“message2”的字符串,我将如何更改这些字符串的内容?我最初用“空”填充它们,以便在下面显示的代码段中进行检查:
char message1[32] = "empty";
…
if(message1 != "empty");
{
printf("\n[USER 1]: %s", message1);
message1 = "empty";
}
在此检查之后,如果message1
包含原始值以外的任何内容,它将打印所述值,然后重置message1
为其原始值"empty"
。然而,显然情况并非如此。我已经用谷歌搜索了答案并且很困惑。
解决方案
您似乎将数组语义与指针语义混淆了。
如果您的字符串(这是一种数据格式)存储在数组中,您可以更改单个字符。但是您不能分配给数组。所以这条线
message1 = "empty";
成为约束违规。相反,您应该使用strcpy()
, 或更好snprintf()
(不要试图使用strncpy()
- 它不是更安全的strcpy()
)。此外,您无法有意义地比较数组和字符串文字。所以这条线
if(message1 != "empty");
也没有任何意义。使用该strcmp()
功能。(此外,分号可能不是您想要的,因为它终止了语句,因此以下复合语句不受该if
语句控制。
如果您不需要修改单个字符,那么您可以只使用 achar *
指向字符串的开头。那么赋值是有效的,并且比较可能是好的(它依赖于编译器整合标准不需要的字符串文字,但所有好的编译器都会这样做)。
推荐阅读
- c++ - CMake:禁止所有警告
- c# - .Net Core Worker Service 加载生产凭证/环境
- kubernetes - Terraform Kubernetes 提供者
- swift - 使用 RxCocoa 处理行选择的问题
- awk - AWK命令对前两行的所有列进行多列
- c - 当我得到 (j>1) 作为条件时,为什么我得到 1 作为答案?
- c# - Crystal Reports - 数据库登录仅在生产机器上失败
- reactjs - 如何在没有不必要渲染的情况下创建可重用的异步 thunk
- php - 遍历目录,按字母顺序排序和显示项目
- javascript - 节点升级后 ESLint/Prettier 抛出错误