假设我们有这个结构
struct Foo{
int FooLength; //length of Foo
char FooChar[4];
};
然后在主要我们有
int sizeFoo = 100; struct Foo myFooList[sizeFoo];
为FooChar
输入数据的最佳方式是什么?会strncpy
,memcpy
,snprintf
还是sprintf
?
我希望做的是像
myFooList[0].FooLength = 3;
myFooList[0].FooChar = "dog";
myFooList[1].FooLength = 3;
myFooList[1].FooChar = "cat";
.
.
.
语法正确,因为在C中你不能只是=“string”;在这里,我不确定最好的方法是什么?我看过类似的主题,但我对strncpy
或sprintf
不好或者你必须在最后添加\0
或其他一些细节感到困惑选择做什么更难。
此外,如果myFooList[]
的所有值都已知道(它们是常量或静态),有没有一种方法可以像其他任何数组一样进行初始化?
答案 0 :(得分:0)
您的整数赋值是正确的,但字符串赋值不正确。以下是正确的方法:
public class NewMainModelName
{
public MainModelName model1 { get; set; }
public PartialModelName pmodel1{ get; set; }
}
答案 1 :(得分:0)
为FooChar输入数据的最佳方式是什么?会strncpy, 或memcpy,或snprintf,还是sprintf? ... 但我对strncpy或sprintf不好的方式感到困惑 或者你必须在最后添加\ 0或其他一些细节 让选择做什么更困难。
好吧,如果你不想终止nul字节,memcpy是个不错的选择。我真的不明白你的问题是什么。
此外,如果myFooList []的所有值都已知道(它们是const 或静态)是否有一种方法可以像其他人一样进行初始化 阵列
在您的示例中,不,因为您使用无法初始化的VLA。但你可以做到以下几点:
#include <stdio.h>
struct Foo {
int FooLength; // length of Foo
char FooChar[4];
};
int main(void) {
struct Foo myFooList[] = {{3, "dog"}, {3, "cat"}};
size_t size = sizeof myFooList / sizeof *myFooList;
}
答案 2 :(得分:0)
如果您的输入始终为3个字符,则可以使用strcpy
,否则请使用strncpy(myFooList[0].FooChar, "dog", 3)
。如果使用strncpy
,则必须添加终止空字符。 strcpy
会自动添加终止空字符,就像VHS在答案中一样。在任何一种情况下,您仍应验证输入是否超过最大长度。要查找字符串的长度(即直到第一个空字符的字符数),您将使用strlen
。要确定char a[]
的容量,您可以使用_countof(a)
。不要忘记其中一个必须是'\0'
。
memcpy
也可以,但用字符串做这件事是不寻常的。
你不会在这里使用sprintf
。当您需要在运行时使用动态数据创建唯一字符串时,通常会使用sprintf
。这不是你在这里做的。如果您有使用.NET的经验,那么它等同于string.Format
。
要初始化'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';