C символ для строкового представления (передающий символ к 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;
}
5
задан frx08 27 February 2010 в 13:24
поделиться

3 ответа

Поскольку 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;
}
5
ответ дан 13 December 2019 в 22:06
поделиться

Чтобы взглянуть на ваш код, я могу сделать пару указателей относительно него, это не критика, отнеситесь к этому с долей скепсиса, что позволит вам стать лучше программистом на 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;
}

Надеюсь, это поможет, С уважением, Том.

2
ответ дан 13 December 2019 в 22:06
поделиться

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 инициализирована нулевым символом конца в конце, иначе этот пример не удастся.

И в качестве отступления: подумайте о том, что делает * в ++; . Он будет увеличивать в и разыменовывать его, что очень похоже на в ++ , поэтому * бесполезно.

3
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: