gpt4 book ai didi

c - 如何加载作为 Struct[i] 成员的字符 []?

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:05 25 4
gpt4 key购买 nike

假设我们有这个结构

struct Foo{
int FooLength; //length of Foo
char FooChar[4];
};

然后我们主要有

int sizeFoo = 100; struct Foo myFooList[sizeFoo];

FooChar 输入数据的最佳方式是什么? strncpymemcpysnprintfsprintf 会怎样?

我想做的是类似

myFooList[0].FooLength = 3;
myFooList[0].FooChar = "dog";
myFooList[1].FooLength = 3;
myFooList[1].FooChar = "cat";
.
.
.

使用正确的语法,因为在 C 中你不能只是 = "string";在这里,我不确定最好的方法是什么?我看过类似的主题,但我对 strncpysprintf 不好或者你必须有一个 \0 感到更加困惑添加在末尾或一些其他细节使得选择做什么变得更加困难。

此外,如果 myFooList[] 的所有值都已知(它们是 const 或 static),是否有一种方法可以像对任何其他数组那样进行初始化?

最佳答案

如果你的输入总是3个字符,你可以使用strcpy,否则使用strncpy(myFooList[0].FooChar, "dog", 3)。如果使用 strncpy,则必须添加终止空字符。 strcpy 将自动添加终止空字符,就像 VHS 在他的回答中一样。在任何一种情况下,您仍然应该验证您的输入没有超过最大长度。要查找字符串的长度(即第一个空字符之前的字符数),您可以使用 strlen。要确定 char a[] 的容量,您可以使用 _countof(a)。不要忘记其中之一必须是 '\0'

memcpy 也可以,但用字符串来做是不寻常的。

你不会在这里使用sprintf。当您需要在运行时使用动态数据创建唯一字符串时,通常会使用 sprintf。这不是你在这里做的。如果您有任何 .NET 经验,它就是 string.Format 的 C 等价物。

要初始化“Foo”数组,您只需编写一个函数即可。即使您在一行中弄清楚语法,也很难阅读和维护。这是一个没有验证的例子,我会把这个任务留给你。

myFooList[0].FooLength = 3;
strncpy(myFooList[0].FooChar, "dog", 3);
myFooList[0].FooChar[3] = '\0';

myFooList[1].FooLength = 3;
strncpy(myFooList[1].FooChar, "cat", 3);
myFooList[1].FooChar[3] = '\0';

关于c - 如何加载作为 Struct[i] 成员的字符 []?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com