我正在尝试编写一个函数来检查数字是否是回文。 (欧拉计划)。我决定编写一个函数,将数字转换为字符串,并使用两个指针在字符串中前后迭代。但是,在尝试添加到for循环内的指针时,我总是遇到分段错误。
int isPalindromeNumber(int number)
{
char* str;
itoa(number, str, 10);
int length = strlen(str);
int isPalindrome = 1;
char* forwardPtr = str;
char* backwardPtr = str + (length - 1);
for (int i = 0; i < length / 2; i++)
{
if (*forwardPtr != *backwardPtr)
{
isPalindrome = 0;
}
// Segfault here.
forwardPtr += 1;
backwardPtr -= 1;
}
return isPalindrome;
}
但是,如果我尝试在for循环之前递增/递减这些指针,则没有问题。我也尝试过将for循环也限制为仅一次迭代,并且它仍然存在段错误。
我觉得这是一个简单的问题,但似乎找不到类似的问题。因此,感谢您的帮助或重定向!
答案 0 :(得分:3)
更改
char* str;
到
char str[11];
在您的代码中,您没有指向任何地方的指针。此更改使本地缓冲区足够大,可以容纳32位整数的字符串版本
答案 1 :(得分:0)
无需使程序复杂化,您可以通过将数字以相反的顺序存储在任何其他变量中,然后比较两个变量来轻松实现此目的
但是,我仍然尊重您的问题,并且我认为您正在尝试学习指针,因此我将为您提供帮助
#include<stdio.h>
' int main(){
char string[40];
char *ptr,*rev;
clrscr();
printf("\nGive a string : ");
gets(string);
ptr=string;
while(*ptr!=NULL){
++ptr;
}
--ptr;
for(rev=string; ptr>=rev;){
if(*ptr == *rev)
{
--ptr;
rev++;
}
else
break;
}
if(rev>ptr)
printf("\nThe given string %s is Palindrome",string);
else
printf("\nThe given string %s is not Palindrome",string);
getch();
return(0);
} '
It just a issue of memory allocation change *str to str[size] it will work