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
'programing' 카테고리의 다른 글
| JSON 개체를 통해 반복 (0) | 2023.07.22 |
|---|---|
| 문자열 형식 지정 시 동일한 값을 여러 번 삽입 (0) | 2023.07.22 |
| '따옴표가 붙은 문자열이 제대로 종료되지 않음'을(를) 유발하는 SQL에서 단일 따옴표를 이스케이프하는 방법은 무엇입니까? (0) | 2023.07.22 |
| python BeautifulSoup 구문 분석 테이블 (0) | 2023.07.22 |
| null이 아닌 마지막 양으로 null 값 채우기 - Oracle SQL (0) | 2023.07.22 |