:あなたはこのような何かを行うことができます。
関数内で宣言する変数は、スタックに格納されます。これは素晴らしく効率的で、関数が終了したときにクリーンアップされます。唯一の問題は、各関数のスタックスロットのサイズが固定されており、関数の実行中は変更できないということです。
メモリを割り当てることができる2番目の場所は、ヒープです。これは、実行時にメモリを割り当てたり、割り当てを解除したりすることができます。あなたはmalloc()で割り振り、終了したらfree()を呼び出します(これはメモリリークを避けるために重要です)。
ヒープ割り当てでは、サイズはになります。時間ですが、必要に応じて拡張できない固定スタックスペースに格納するよりも優れています。
これは、動的に割り当てられたバッファを使用してASCIIコードに文字列をデコードするためのシンプルかつ愚かな機能は次のとおりです。
char* str_to_ascii_codes(char* str)
{
size_t i;
size_t str_length = strlen(str);
char* ascii_codes = malloc(str_length*4+1);
for(i = 0; i<str_length; i++)
snprintf(ascii_codes+i*4, 5, "%03d ", str[i]);
return ascii_codes;
}
編集:あなたがちょうどバッファを取得したいコメントに言及しました。上記の例では、文字列内の各項目を既知の長さにし、余分なスペース文字をトリミングしないでコーナーをカットします。これは、これらの問題を修正するよりスマートなバージョンです。
char* str_to_ascii_codes(char* str)
{
size_t i;
int written;
size_t str_length = strlen(str), ascii_codes_length = 0;
char* ascii_codes = malloc(str_length*4+1);
for(i = 0; i<str_length; i++)
{
snprintf(ascii_codes+ascii_codes_length, 5, "%d %n", str[i], &written);
ascii_codes_length = ascii_codes_length + written;
}
/* This is intentionally one byte short, to trim the trailing space char */
ascii_codes = realloc(ascii_codes, ascii_codes_length);
/* Add new end-of-string marker */
ascii_codes[ascii_codes_length-1] = '\0';
return ascii_codes;
}
どのようなプログラミング言語ですか? :) – MattJ
私はCでこれをやろうとしています:) – Tuntuni
あなたの問題が解決されてうれしい!正解を受け入れ、必要に応じて上/下の投票を行う必要があります。詳細については、http://meta.stackexchange.com/a/5235およびhttp://stackoverflow.com/faq#howtoask – MattJ