您好我在尝试编译代码时遇到错误。
int main()
{
char string_buffer[20], string_buffer1[20];//which is going to be copied into and reversed.
printf("Enter the string to check if it is a palindrome\n");
scanf("%20s", string_buffer);
strcpy(string_buffer1,string_buffer);//copying string_buffer into string_buffer1
strrev(string_buffer1);//reverse string_buffer1
if (strcmp(string_buffer,string_buffer1) == 0){//check to see if they are the same
printf("Palindrome.\n");
}else{
printf("Not a palindrome.\n");
}
return 0;
}
当我尝试编译时,我收到此警告和错误。
palindrome.c:12:2: warning: implicit declaration of function 'strrev' is invalid
in C99 [-Wimplicit-function-declaration]
strrev(string_buffer1);//reverse string_buffer1
^
1 warning generated.
/tmp/palindrome-1efe10.o: In function `main':
palindrome.c:(.text+0x68): undefined reference to `strrev'
clang-3.5: error: linker command failed with exit code 1 (use -v to see invocation)
答案 0 :(得分:1)
你在linux中没有strrev
,使用其中一个替代方案(取自here):
#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;
}
答案 1 :(得分:0)
您不需要strrev甚至不需要复制内存。 以下代码更简单,更直接地回答您的问题。 请注意,此代码假定NULL和“”都不是palindroms。 如果传递的字符串是回文,则函数返回1,否则返回0。
int is_palindrome(const char *str)
{
size_t len = str ? strlen(str) : 0;
const char *p;
if (len < 1)
return 0;
for (p = str + len - 1; str < p; str++, p--)
if (*p != *str)
return 0;
return 1;
}