C文字列はそう
char *maxCharac(int x)
{
char *str = malloc(x + 1);
if (str != NULL)
{
for (int i = 0; i < x; i++)
{
str[i] = 'a';
}
str[i] = '\0';
}
return str;
}
、終了NULです:
は
- あなたはnull終端
'\0'
malloc(x + 1);
sizeof(char)
のための余地を残しておく必要があります常に1標準 あたりです
- あなたはチェック
malloc&co
戻り値!= NULL
を使用してください。
あるいは、割り当てられたメモリ
char *maxCharac(int x)
{
char *str = calloc(x + 1, 1);
if (str != NULL)
{
for (int i = 0; i < x; i++)
{
str[i] = 'a';
}
}
return str;
}
最後のものをゼロにあなたがcallocを使用することができ、最後の命令を回避するために、機能ごとに、呼び出し側は、可能なを使用しないように保証するために、関数の戻り値をチェックする必要がありますNULLポインタが返さ:
int main(void)
{
char *str = maxCharac(2);
if (str != NULL)
{
printf("Test: %s\n", str);
}
}
出典
2017-04-10 14:24:27
LPs
を[C ' 'に戻り'のmalloc() 'の値と家族をキャストするではない理由でこの議論を参照してください。](http://stackoverflow.com/q/605845/ 2173917)。 –
あなたはそれを終わらせなければなりません。この行を 'for'ループの後に追加し、' malloc'行に '+ 1 'を追加してください。 'str [x] = NULL;' – imreal
文字列をnull-termanteしなければならないので、文字の後ろに余分なバイトが必要です。 – LPs