Вопрос

моя проблема заключается в преобразовании символа в строку я должен передать 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top