Реализация функции Strcat - PullRequest
0 голосов
/ 29 марта 2011

У меня есть программный вопрос о реализации функции strcat(). Я пытался решить эту проблему, и я получил сообщение об ошибке нарушения прав доступа.

Моя созданная функция:

char str_cat(char str1, char str2)
{
    return str1-'\0'+str2;
}

что не так в коде выше?

Еще один вопрос, пожалуйста, такое "iostream" заголовочный файл? где его взять?

спасибо

Ответы [ 3 ]

1 голос
/ 29 марта 2011

К сожалению, все неправильно с этой функцией, даже тип возвращаемого значения и типы аргумента.Он должен выглядеть как

char * strcat(const char *str1, const char *str2)

, и он должен работать, выделяя новый блок памяти, достаточно большой для хранения сцепленных строк, используя malloc (для C) или new (для C ++), а затем скопируйте обе строки вЭто.Я думаю, что вам (вашей) домашней работе отказали для вас, хотя, я не думаю, что вы многое знаете о том, что это значит.

1 голос
/ 29 марта 2011

Не хочу звучать негативно, но с этим кодом не так уж и много.

Во-первых, строки в C - это char *, а не char.

Во-вторых, нет способа «сложить» или «вычесть» их так, как вы надеетесь (что-то вроде возможно в, скажем, Python).

iostream - это стандартный заголовок ввода / вывода для C ++, он должен быть в комплекте с вашим дистрибутивом.

Я бы действительно предложил бы учебник по указателям, чтобы заставить вас работать - этот Я нашел, просто набрав в поиске "ANSI C указатели" - я предполагаю, что проблема просит вас Ответ C, в отличие от C ++, так как в C ++ вы бы использовали std :: string и перегруженный оператор +.

1 голос
/ 29 марта 2011

В приведенном выше коде нет ничего правильного.

  • Вам нужно взять char * параметров
  • Вам нужно вернуть char *, если вам нужно что-то вернуть (что не нужно)
  • Вам нужно будет зациклить строку, копируя отдельные символы - нелегкое решение с + и -
  • Вам нужно будет 0-прекратить результат

например. как это:

void strcat(char * Dest, char const * Src) {
  char * d = Dest;
  while (*d++);
  char const * s = Src;
  while (*s) { *d++ = *s++; }
  *d = 0;
}

Почему вам нужно это сделать? В стандартной библиотеке есть очень хороший strcat, и есть очень хороший std::string, который вы можете использовать + вкл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...