programing

Linux에서는 strrev() 기능을 사용할 수 없습니까?

elecom 2023. 7. 22. 09:24
반응형

Linux에서는 strrev() 기능을 사용할 수 없습니까?

다음을 사용하여 코드를 작성하려고 했습니다.strrev()포함시켰습니다.<string.h>하지만 여전히 나는 "정의되지 않은 언급"을 받고 있습니다.strrev오류

나는 그것을 발견했습니다.strrev()남자 페이지가 전혀 없습니다. 왜죠?

Linux에서 지원하지 않음strrev()?

맞아요.사용 가능한 대체 구현 중 하나를 사용합니다.

#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;
}
#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;
}

당신의 질문에 정확하게 대답하자면,

strrev()는 Linux에서 사용할 수 없습니까?

string.h 라이브러리에서 사용할 수 있는 함수 strrev().strupr(), strlwr(), strrev()와 같은 일부 다른 문자열 함수를 포함하는 함수는 ANSIC(Turbo C/C++)에서만 사용할 수 있으며 표준 C-GCC 컴파일러에서는 사용할 수 없습니다.

시스템에 관한 것이 아닙니다.당신이 사용하고 있는 C 컴파일러에 관한 것입니다.

참조:

https://discuss.codechef.com/t/is-strrev-function-not-available-in-standard-gcc-compiler/2449

https://www.csestack.org/undefined-reference-to-strrev/

불행하게도,strrevglibc'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;
}

이거 어때:

#include <string.h>

char *strrev(char *s)
{
    if (s && *s) {
        char *b = s, *e = s + strlen(s) - 1;
        while (b < e) {
            char t = *b;
            *b++ = *e;
            *e-- = t;
        }
    }
    return s;
}

문자열을 반전하는 문자열 라이브러리 함수가 없습니다.

strrev()Linux의 GCC 컴파일러에는 없습니다.자신만의 역함수를 만듭니다.

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);
}

지정된 지점에서 소스 문자열을 종료해야 할 때 다음과 같이 반대로 수행합니다.

// terminate and reverse string
char* tstrrev(char* s, int pt)
{
  char *r = malloc( (pt+1) * sizeof(char) );

    s[pt] = r[pt] = '\0';
    s+= pt - 1;

     while ( *s )
      *r++ = *s--;

 return r-pt;
}

언급URL : https://stackoverflow.com/questions/8534274/is-the-strrev-function-not-available-in-linux

반응형