如何添加到已分配的char?

时间:2013-11-09 08:32:27

标签: c++ c

这是一个非常简单的问题。

我有一个带缓冲区[250]的结构。

struct testStruct{
   char buffer[250];
};

如何在该缓冲区中添加“测试字符”?

我真的不能像newStruct.buffer =“test characters”那样做一个简单的任务;

5 个答案:

答案 0 :(得分:1)

您可以使用 sprintfsnprintfstrcpystrncpy

功能

这样的事情:

sprintf(newStruct.buffer,"%s","test characters"); // doesnt protect against buffer overflow

snprintf(newStruct.buffer,250,"%s","test characters"); // guards against overflows

strcpy(newStruct.buffer,"test characters"); // as suggested in another answer also doesnt guard against overflows

strncpy(newStruct.buffer,"test characters",250);// guards against overflows

(而不是明确提及snprintfstrncpy中的尺寸250,您可以使用sizeof函数/指令代替)


这会将“测试字符”放入最后带有\0字符的缓冲区数组中......

如果稍后需要,您可以使用strcat函数向其附加更多字符串。

这是sprintf的man页面:

http://linux.die.net/man/3/sprintf

答案 1 :(得分:0)

strcpy(newStruct.buffer, "test characters");

答案 2 :(得分:0)

newStruct.buffer = "test characters";"test characters"的常量值放入数组buffer的指针。显然你是C和C ++编程的新手,你应该多阅读一下,试试herehere

答案 3 :(得分:0)

如果您拥有char数组,则可以使用strcpy。此函数将复制每个字符,直到字符串结尾('\ 0'也被复制)。您还可以使用strncpy来解决安全问题。

#include <string.h>

char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);

请记住,参数的顺序实际上与做法相同:dest = src

您还可以使用sprintf获取更高级的内容。它与printf类似,但在字符串中写入。

#include <stdio.h>

int sprintf(char *str, const char *format, ...);

但是,如果您没有已经分配的字符串,请在可能释放源字符串时查看strdup

回到你的情况,你不能写出类似的内容:newStruct.buffer = "test characters";因为它会尝试将newStruct.buffer的地址更改为指向其他地方。只有指针(char*)才能实现,但不能使用数组。

strcpy(newStruct.buffer, "test characters");

strncpy(newStruct.buffer, "test characters", sizeof(newStruct.buffer));

答案 4 :(得分:0)

如果你想附加一个字符串说要添加,那么你应该使用标准的C函数strcat或strncat,前提是缓冲区中的最后一个实际字符是终止零。 如果要从缓冲区的第一个字符开始将字符串复制到缓冲区中,则应使用标准C函数strcpy或strncpy。 例如,如果您确定字符串的长度小于250,那么您可以简单地编写

std::strcpy( buffer, "test characters" );

如果您不知道要复制的字符串的大小,那么您可以使用strncpy

std::strncpy( buffer, SomeString, 250 );
buffer[249] = '\0';

在这种情况下,副本可能会被截断。

如果缓冲区已经包含一些字符串并且您要添加一个新字符串,那么您的选择将再次取决于您是否确定新字符串适合缓冲区,

如果您确定,那么您可以写

strcat( buffer, "test characters" );

如果您不确定可以写

size_t n = 250 - std::strlen( buffer );

strcat( buffer, SomeString, n );
buffer[249] = '\0';