在C中将字符串添加到char数组

时间:2010-08-24 14:54:17

标签: c arrays string char fgets

我有一个名为buf的C数组。这是它的定义:

char buf[1024];

现在,我当前的代码来自stdin并使用fgets()来设置该数组,但我希望使用代码来设置它。现在设置buf的行看起来像这样:

fgets(buf, 1024, stdin);

基本上,我想替换stdin,比如说......“My String”。最好的方法是什么?

5 个答案:

答案 0 :(得分:8)

查找sprintf,例如:Cpp reference

编辑:

sprintf(buf, "My string with args %d", (long) my_double_variable);

编辑2:

建议避免溢出(但这是标准C),您可以使用snprintf

答案 1 :(得分:4)

snprintf只是C99而不是C89,sprintf_s / strcpy_s只是MSVC,而不是C89,而不是C99。

char *mystr="come from stdin or file or ...";
char buf[1024];
...
memset(buf,0,sizeof buf);
strncpy(buf,mystr,(sizeof buf)-1);

或非数组:

#define BUFLEN 512
char *mystr="come from stdin or file or ...";
char *buf;
...
char *buf=calloc(1,BUFLEN);
strncpy(buf,mystr,BUFLEN-1);

它适用于所有ANSI C环境。

答案 2 :(得分:2)

strcpy(buf, "My String");

Microsoft的编译器还包含一个strcpy_s函数,它是strcpy的“安全”版本。它确保您不会超出buf。在这种特殊情况下,这可能不是问题,但你应该知道。但是,请注意,它不适用于任何其他编译器,因此它可以在需要便携式的地方使用。

 strcpy_s(buf, sizeof(buf), "My String");

答案 3 :(得分:1)

有许多变体,有些已经提出过,有些则没有:

...

char input[] = "My String";

strcpy(buf, input);

strncpy(buf, input, sizeof(buf));

sscanf(input, "%s", buf);

sprintf(buf, "%s", input);

memcpy(buf, input, strlen(input));

...

他们中的大多数都不确定/不安全。究竟应该采取什么取决于 您真正希望在您的代码中执行的操作。

此致

RBO

答案 4 :(得分:-1)

详细但安全:

int copy_size = sizeof( buf ) - 1 < strlen( MyString ) ? sizeof( buf ) - 1 : strlen( MyString );
memset( buf, 0, copy_size + 1 );
memcpy( buf, MyString, copy_size );