C char в строку (передача char в strcat())
Вопрос
моя проблема заключается в преобразовании символа в строку я должен передать strcat() символ для добавления к строке, как я могу это сделать?Спасибо!
#include <stdio.h>
#include <string.h>
char *asd(char* in, char *out){
while(*in){
strcat(out, *in); // <-- err arg 2 makes pointer from integer without a cast
*in++;
}
return out;
}
int main(){
char st[] = "text";
char ok[200];
asd(st, ok);
printf("%s", ok);
return 0;
}
Решение
С тех пор как ok
указывает на неинициализированный массив символов, все это будет мусорными значениями, поэтому, когда конкатенация (по strcat
) начнется неизвестно.Также strcat
принимает C-строку (т.е.массив символов, который заканчивается символом '\0').Отдающий char a[200] = ""
даст вам [0] = '\ 0', затем от [1] до [199], установленных в 0.
Редактировать: (добавлена исправленная версия кода)
#include <stdio.h>
#include <string.h>
char *asd(char* in, char *out)
{
/*
It is incorrect to pass `*in` since it'll give only the character pointed to
by `in`; passing `in` will give the starting address of the array to strcat
*/
strcat(out, in);
return out;
}
int main(){
char st[] = "text";
char ok[200] = "somevalue"; /* 's', 'o', 'm', 'e', 'v', 'a', 'l', 'u', 'e', '\0' */
asd(st, ok);
printf("%s", ok);
return 0;
}
Другие советы
strcat
не будет добавляться отдельных символов.Вместо этого требуется const char*
(полная строка в стиле C), которая добавляется к строке в первом параметре.Таким образом, ваша функция должна выглядеть примерно так:
char *asd(char* in, char *out)
{
char *end = out + strlen(out);
do
{
*end++ = *in;
} while(*in++);
return out;
}
Цикл do-while будет включать нулевой ограничитель, который необходим в конце строк в стиле C.Убедитесь, что ваша строка out инициализирована нулевым ограничителем в конце, иначе этот пример завершится неудачей.
И в качестве отступления:Думать о чем *in++;
делает.Это будет увеличиваться in
и разыменовать его, что является тем же самым, что и in++
, так что *
бесполезно.
Чтобы посмотреть на ваш код, я могу сделать пару замечаний по отношению к нему, это не критика, отнеситесь к этому со щепоткой соли, которая позволит вам стать лучшим программистом на C:
- Нет прототипа функции.
- Неправильное использование указателей
- Имея дело с
strcat
функция используется неправильно. - Переусердствовать - нет необходимости в
asd
функция сама по себе! - Использование работы с переменными, в частности
char
массив, который неправильно инициализирован.
#include <stdio.h> #include <string.h> int main(){ char st[] = "text"; char ok[200]; ok[0] = '\0'; /* OR memset(ok, 0, sizeof(ok)); */ strcat(ok, st); printf("%s", ok); return 0; }
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Чтобы преобразовать символ в строку (заканчивающуюся нулем), вы могли бы просто выполнить:
char* ctos(char c)
{
char s[2];
sprintf(s, "%c\0", c);
return s;
}
Рабочий пример: http://ideone.com/Cfav3e