問題は、渡された文字列の終わりを関数が認識しないことです。これを修正するにはchar *
、すべて0
のまたはに初期化する必要があります\0
。もう1つの問題は、数値を文字に誤って変換していることです。そして最後に、文字列のサイズが渡されないため、関数について安全なものは何もありません。そのため、事前に十分なスペースを割り当てる必要があります。
void concat(char *str, const char *ch, int num)
{
//This is function not safe since you do not
//know how much space str has allocated
str += strlen(str);
*str = *ch; ++str;
if(num < 0)
{
*str = '-';//Add the -
++str;
num *= -1; //Make the number positive
}
//Determine the number of digits first
//because you need to add characters backwards
int digits = 0, tmpnum = num;
while (tmpnum) {
tmpnum /= 10;
++digits;
}
while(digits--)
{
str[digits] = '0' + num % 10;
num /= 10;
}
}
使用法:
char *runner = new char[20]();
//or
//char *runner = (char*)calloc(20, 1);
concat(runner, "a", 10);
concat(runner, "b", 20);
concat(runner, "c", -30);
delete [] runner;
//or if you used calloc
//free(runner);
私はこれが宿題であると仮定してこれを行いました。特にC++
あなたの質問がタグ付けされたものを使用して、これを達成するためのより簡単で安全な方法があります。