0

これは本当に簡単な質問です。

char バッファー [250] を持つ構造があります。

struct testStruct{
   char buffer[250];
};

たとえば、「テスト文字」をそのバッファに追加するにはどうすればよいですか?

newStruct.buffer = "test characters"; のような単純な割り当ては実際にはできません。

4

5 に答える 5

1

関数sprintfまたはsnprintfまたはstrcpyまたはを使用できます。strncpy

このようなもの:

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(およびでサイズ 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

追加するという文字列を追加する場合は、標準 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 に答える
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 に答える