仅在for循环内

时间:2018-09-20 15:12:56

标签: c

我正在尝试编写一个函数来检查数字是否是回文。 (欧拉计划)。我决定编写一个函数,将数字转换为字符串,并使用两个指针在字符串中前后迭代。但是,在尝试添加到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循环也限制为仅一次迭代,并且它仍然存在段错误。

我觉得这是一个简单的问题,但似乎找不到类似的问题。因此,感谢您的帮助或重定向!

2 个答案:

答案 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