单词“你好” C 中字符数组的赋值

发布于 2024-12-14 14:12:38 字数 257 浏览 0 评论 0原文

在 C 中,这是合法的并且可以编译:

char names[5] = "Hello";

但这一个不是:

char names[5];

names = "Hello";

How do I put assignment in array of strings word "Hello" ?我可以在没有 strcpy 的情况下做到这一点吗?

In C that's legal and will compile:

char names[5] = "Hello";

but this one is not:

char names[5];

names = "Hello";

How do I put assignment in array of characters word "Hello" ? Can I do that without strcpy ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

や莫失莫忘 2024-12-21 14:12:39

你不能。在 C 中,数组不是左值,因此您无法为其赋值。

唯一的方法是:

  • 使用复制函数(例如 memcpystrcpy
  • 一次为所有元素分配一个(eew )
  • 使用指针而不是数组。有一些民间知识认为“数组只是一个指针”。 这是 不是true(是的,这是3个链接)。

You cannot. In C an array is not an lvalue so you can't assign to it.

The only ways to do it:

  • Use a copying function (like memcpy or strcpy for example)
  • Assign all the elements one at a time (eew)
  • Use a pointer instead of an array. There is some folk knowledge that "an array is just a pointer". It's not true (yes, those are 3 links).
吻安 2024-12-21 14:12:39

由于终止空字节,您的 names 字符串应至少有 6 个(而不是 5)个字符:

char names[6];

使用 strcpy 或等效代码,例如

names[0] = 'H';
names[1] = 'e';
names[2] = 'l';
names[3] = 'l';
names[4] = 'o';
names[5] = (char)0;

以及最新版本gcc(即 4.6),当要求足够的优化(-O2)时,会将 strcpy(names,"Hello"); 优化为等价的上面的代码。

Your names string should have at least 6 (not 5) characters, because of the terminating null byte:

char names[6];

Either with strcpy or with the equivalent code, e.g.

names[0] = 'H';
names[1] = 'e';
names[2] = 'l';
names[3] = 'l';
names[4] = 'o';
names[5] = (char)0;

And a recent version of gcc (i.e. 4.6), when asked for enough optimization (-O2), would optimize strcpy(names,"Hello"); into equivalent of above code.

失退 2024-12-21 14:12:39

你的代码将会有问题。 C 字符串末尾有一个额外的空字符。 “你好”需要 6 个字节。我相信你的字符串“Hello”将在第一个示例中变成“Hell”。

Your code is going to have problems. C strings have an extra null character at the end. "Hello" requires 6 bytes. I believe your string "Hello" is going to turn into "Hell" in the first example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文