1

プロジェクトでsscanfを使用して、ソース バッファーからターゲット バッファーに文字列をコピーしています。例えば:

char* target;
target = (char*)malloc(100 * sizeof(char));
char* source = "Hello World";
sscanf(source, "%[^\t\n]", target); // trying to copy "Hello World" into target.
printf("%s\n", target);//this will print "Hello World".

しかし、このようなコーディング スタイルは受け入れられません。私のマネージャーが私に求めていることは、次のようなものです。

sscanf(source, "%11[^\t\n]", target); // NOTE: I've written "%11". here, 11 == length of hello world.

つまり、フォーマット指定子も提供してほしいということです。(この場合は %11)。

しかし、問題は、ソースがさまざまな長さになる可能性があり、さまざまな長さの文字列ごとに正しい書式指定子を記述する方法がわからないことです。

4

4 に答える 4

7

使用する:

sscanf(source, "%*[^\t\n]", maxlen, target)

ここで、maxlen は読み取りたいサイズです。

sscanf入力文字列の任意の最大長を取るためのフォーマット文字列(またはその兄弟のいずれか)を作成する簡単な方法はないようです。printf提案はに直交することに基づいていましscanfたが、そうではないことが判明しました。

strtokstrncpyまたはstrdupを使用して、トークンをコピーするほうがうまくいく場合があります。

ただし、C++ とタグ付けされているため、以下を使用しないでください:

std::stringstream ss(source);  
std::string target;
getline(ss, target, "\t");
于 2013-08-23T11:34:52.467 に答える
0

まず、これには strcpy() を使用します。

次に、フォーマット指定子は単なる文字列なので、必要な文字列の strlen() を取得した後、sprintf() を使用して作成します。

于 2013-08-23T11:33:41.977 に答える