0

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

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

struct testStruct{
   char buffer[250];
};

我该如何添加,比如说——“测试字符”到那个缓冲区?

我真的不能做一个像 newStruct.buffer = "test characters"; 这样简单的任务。

4

5 回答 5

1

您可以使用函数sprintforsnprintfstrcpyorstrncpy

所以是这样的:

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

snprintf(而不是在and中明确提到大小 250 strncpy,您可以改用sizeof函数/指令)


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

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

这是mansprintf 的页面:

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

于 2013-11-09T08:40:12.563 回答
0
strcpy(newStruct.buffer, "test characters");
于 2013-11-09T08:33:17.723 回答
0

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

于 2013-11-09T08:42:53.953 回答
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));
于 2013-11-09T08:50:36.237 回答
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';
于 2013-11-09T11:01:56.617 回答