【问题标题】:segmentation fault in passing a char* pointer [duplicate]传递char *指针时出现分段错误[重复]
【发布时间】:2017-10-20 22:33:45
【问题描述】:

我正在尝试制作一个程序来检查输入的字符串是否使用递归。下面是代码。

#include <stdio.h>
#include <string.h>

int isPalindrome(char* s, int i, int j) {
    if (i >= j)
        return 1;

    if (s[i] != s[j])
        return 0;

    return isPalindrome(s, i+1, j-1);
}

int main() {

    char* word;
    printf("Enter a word \n");
    scanf("%s", word);

    if (isPalindrome(word, 0, strlen(word) - 1))
        printf("Palindrome \n");
    else
        printf("Not Palindrome \n");

    return 0;
}

该程序似乎给出了由函数 isPalindrome() 引起的分段错误。我的代码哪里出错了?

谢谢。

【问题讨论】:

  • scanf("%s", word); 调用 未定义的行为 - 您需要先初始化指针 word 以指向有效(且足够)内存
  • 你还没有为word分配内存——它只是一个指针。
  • 说没有为word分配内存,你可以改变它,例如char word [80];
  • 您如何确定故障在isPalindrome 内部? scanf 应该首先失败。
  • @DrewDormann 已修复。

标签: c pointers


【解决方案1】:

当你有一个字符指针时,你应该有另一个已经分配的字符串并让它指向那个

或者您直接为字符串动态分配空间。

如果你 malloc 一些空间,你的代码就可以工作

char *word = malloc(20);

或者你可以创建一个字符串

char word[20];

【讨论】:

  • 成功了!!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2021-12-22
  • 2015-09-10
  • 2019-07-08
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多