私が理解したように、正しいプログラミングスタイルは、別の関数から文字列 (char []) を取得する場合は、呼び出し元で char * を作成し、作成された文字列の長さと一緒に文字列フォーマット関数に渡すのが最善であることを示しています。私の場合、文字列整形関数は「getss」です。
void getss(char *ss, int& l)
{
sprintf (ss,"aaaaaaaaaa%d",1);
l=11;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *f = new char [1];
int l =0;
getss(f,l);
cout<<f;
char d[50] ;
cin>> d;
return 0;
}
「getss」は、文字列をフォーマットして ss* に返します。gets は、呼び出し元によって作成された外部の文字列の長さを取得することは許可されていないと思いました。私の理解では、発信者は変数「l」で長さを伝え、「getcc」はバッファが完全に満たされていない場合に長さを返しますが、発信者によって定義された配列範囲の外に出ることは許可されていません。
しかし、実際には、呼び出し元によって作成されたバッファーのサイズはそれほど重要ではないことがわかりました。サイズ 1 を作成し、gets が 11 文字の長さでいっぱいになる場合は問題ありません。出力では、「getss」が埋めたすべての文字を取得します。
それで、長さ変数を渡す理由は何ですか-常にゼロで終了する文字列を取得し、それに応じて末尾を見つけます。
getss で拡張できる場合、指定された長さのバッファを作成する理由は何ですか?
実世界でどのように行われるか - 別の関数から文字列を取得するには?