문제는 함수가 전달되는 문자열의 끝을 인식하지 것입니다. 당신이 당신의 char *
0
모든 년대 또는 \0
을 초기화하기 위해 필요한이 문제를 해결하려면. 다른 문제는 숫자를 문자로 잘못 변환하는 것입니다. 마지막으로 문자열의 크기가 전달되지 않으므로 함수에 대해 아무 것도 안전하지 않습니다. 그래서 여러분은 먼저 충분한 공간을 할당해야합니다.
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++
를 사용하여이 작업을 수행하기 쉬운/안전한 방법이 있습니다, 이것은 숙제였다 가정.
출처
2012-12-05 20:03:27
Joe
a10은 char이 아닙니다. 함께 작업하려면 일련의 문자가 필요합니다. –
이것이 C++ 인 경우'std :: string'을 사용하면 어떨까요? –
'concat'는 두 번째 매개 변수로'char *'를 기대하며'char'를 전달합니다. 이것도 어떻게 컴파일됩니까? – Praetorian