Функция strrev () недоступна в Linux? - PullRequest
29 голосов
/ 16 декабря 2011

Я пытался написать код, используя strrev(). Я включил <string.h>, но все равно получаю ошибку "неопределенная ссылка на strrev".

Я обнаружил, что strrev() вообще не имеет справочной страницы. Зачем?

Разве Linux не поддерживает strrev()?

Ответы [ 4 ]

32 голосов
/ 16 декабря 2011

Правильно.Используйте одну из альтернативных доступных реализаций:

#include <string.h>

char *strrev(char *str)
{
      char *p1, *p2;

      if (! str || ! *str)
            return str;
      for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
      {
            *p1 ^= *p2;
            *p2 ^= *p1;
            *p1 ^= *p2;
      }
      return str;
}
21 голосов
/ 02 апреля 2015
#include <string.h>

char *strrev(char *str)
{
    if (!str || ! *str)
        return str;

    int i = strlen(str) - 1, j = 0;

    char ch;
    while (i > j)
    {
        ch = str[i];
        str[i] = str[j];
        str[j] = ch;
        i--;
        j++;
    }
    return str;
}
2 голосов
/ 23 мая 2016

К сожалению, strrev, похоже, отсутствует в glibc's string.h.

Очевидно, я опаздываю на вечеринку "Вот какой-то код", но мне нравится эта реализация.

#define MAX_CHARS 10000
// safe_usub -- perform safe unsigned subtraction
size_t safe_usub (size_t x, size_t y) {
  return x > y ? x - y : y - x ;
}

char* str_reverse (const char* const str) {
  if (!str) { return NULL; }

  size_t len = strnlen(str, MAX_CHARS);
  char*  new = malloc( sizeof(char) * len );

  size_t i;
  for (i = 0; i < len; i++) {
    new[i] = str[ safe_usub(i + 1, len) ];
  }

  new[i] = 0;

  return new;
}
0 голосов
/ 01 января 2018

Нет функции библиотеки строк для обращения строки.

strrev() Нет в компиляторе GCC в Linux.Сделайте свою собственную обратную функцию:

reverse.c:

/*
 * C program to reverse a string using recursion
 */
#include <stdio.h>
#include <string.h>

void reverse(char [], int, int);
int main()
{
    char str1[20];
    int size;

    printf("Enter a string to reverse: ");
    scanf("%s", str1);
    size = strlen(str1);
    reverse(str1, 0, size - 1);
    printf("The string after reversing is: %s\n", str1);
    return 0;
}

void reverse(char str1[], int index, int size)
{
    char temp;

    temp = str1[index];
    str1[index] = str1[size - index];
    str1[size - index] = temp;

    if (index == size / 2)
    {
        return;
    }
    reverse(str1, index + 1, size);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...