【发布时间】:2011-04-20 20:44:55
【问题描述】:
int main(void) {
...
char A[32] = "00000000000000001111111111111110";
...
A = "11111111111111111111111111111111";
}
这是我想做的错误的 c 代码。我希望用相同长度的新字符串覆盖内存中的字符串。我不断收到类似类型不兼容的错误。
【问题讨论】:
-
您对
A的声明可能差了一个。 -
@mu 太短:问题中的代码是合法的 C,它是 32 个
char的数组,用给定的 32 个字符初始化。不需要在A中包含 NUL 终止符,除非您想将其视为以 NUL 终止的字符串。编译器知道 NUL 终止符不适合,并且在从常量字符串执行A的初始化时不会复制它。 -
@Greg:因此是 probably 资格。它看起来像一个字符串,闻起来像一个字符串,我们不知道它是一个字符串还是一个字符数组。初始化使它看起来像一个字符串,所以我至少在代码审查中将其标记为模棱两可。我们不知道
A是如何使用的,所以我们不知道它是否是一个错误,我们只知道它看起来很可疑。答案中出现strcpy和strncpy表明它是模棱两可的,memcpy表明有些人注意到了模棱两可并试图解释它。 -
你说得对,使用 probably 是正确的选择。 :)
-
从技术上讲,
strncpy并非用于处理以空结尾的字符串,而是用于处理空 填充 字符串。只是后者即使在固定大小的结构成员中也很少见。
标签: c arrays char incompatibletypeerror