0

すみません、私は初心者で、これに苦労しています。

最初に、3 つの文字列と整数を保持するのに十分なメモリを割り当てたい

char *final;
char string1[256];
char string2[256];
char string3[256];
int myNum, mySize= 0;

// populate values
...

mySize += strlen(string1) + strlen(string2) + strlen(string3);

final = malloc(mySize);

sprintf(final, "%s = %s{%s:%d}", string1, string2, string3, myNum);

整数は 90,000 にもなる可能性がありますが、整数に割り当てる量をどのように知ることができますか? ごめん、簡単だったら

ヌル ポインターと =、{ などの記号に +1 を割り当てる必要があることに気付きました。

ありがとう!

4

2 に答える 2

2

整数値を文字列として出力しています。

整数の文字列変換を保持する別の文字配列を作成してから、合計します。

'\0'文字列を終了するには、末尾のNULL文字を保持するためにもう1バイト必要であることを忘れないでください。文字配列と文字列の違いを理解することは価値のある演習です(つまり、文字列は配列'\0'のある時点で終わる文字配列です)。

char *final;
char string1[256];
char string2[256];
char string3[256];
char numberString[256];
int myNum, mySize= 0;

// populate values
...
sprintf(numberString,"%d",myNum);

mySize = strlen(string1) + strlen(string2) + strlen(string3) + strlen(numberString) + 1;

final = malloc(mySize*sizeof(char)); //The sizeof(char) is probably overkill, but safe practise

if(final) // check for null in case malloc failed above
{
  sprintf(final, "%s = %s{%s:%d}", string1, string2, string3, myNum);
} else {
  printf("MEMORY ERROR");
}
于 2012-11-29T23:33:49.707 に答える
1

整数型のサイズはバイト単位で固定されているため、値が最大整数のサイズを超えない限り、心配する必要はありません。配列は初期化されておらず、設定されている場合とされていない場合があるnullの終了文字を探しているためstrlen、配列の呼び出しに問題があります。strlenこのように256バイトを割り当てたい場合は、を使用するsizeof string1よりも使用する方が適切ですstrlen(string1)。あなたの言うことからchar[256]、あなたのニーズに合わせて3つの配列と整数のメンバーで構造体を作成することを検討し、それを動的に割り当てられていないオブジェクトとして扱う方が良いかもしれません。char配列はすでにスペースの観点から作成されているため、mallocここでさらにスペースを割り当てる以外は何もしません。これがあなたが望むものであると確信していますか?

于 2012-11-29T23:35:42.890 に答える