C:有时会出现段错误?

标签 c segmentation-fault

Stackoverflowers 的 friend 们大家好!

为什么下面的代码仅有时(即 1/10 次)抛出段错误?

控制台:

输入字符串

赛车

段错误

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

int main()
{
   char string_buffer[21];
   int i, length;
   int flag = 0;

   print f("Input a string\n");
   scanf("%20s", string_buffer);

   length = strlen(string_buffer);

   for(i=0; i < length; i++) {
      if(string_buffer[i] != string_buffer[length-i-1]) {
         flag = 1;
         break;
      }
   }

   if(flag) {
      printf("%sNot a Palindrome.\n");
   }
   else {
      printf("%sPalindrome.\n");
   }
   return 0;
}

最佳答案

您的 printf() 语句需要一个 char * 指针,但您没有传递一个指针。这会调用未定义的行为。

改变这个

if(flag) {
   printf("%sNot a Palindrome.\n");
}
else {
   printf("%sPalindrome.\n");
}

if (flag == 1) 
   printf("`%s' IS NOT a Palindrome.\n", string_buffer);
else 
   printf("`%s' IS a Palindrome.\n", string_buffer);

如果您启用编译器警告,您应该收到警告。

这是代码的改进版本,已修复上述问题

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

int main()
{
    char string_buffer[21];
    int flag = 0;
    int length;

    if (scanf("%20s%n", string_buffer, &length) != 1)
        return -1;
    for (int i = 0 ; ((flag == 0) && (i < length)) ; ++i)
        flag = (string_buffer[i] != string_buffer[length - i - 1]);
    if (flag == 1)
        printf("`%s' IS NOT a Palindrome.\n", string_buffer);
    else
        printf("`%s' IS a Palindrome.\n", string_buffer);
    return 0;
}

关于C:有时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34903244/

相关文章:

c - 段错误: 11 C

C: 宏产生警告 "statement with no effect"

c - strcpy 给出段错误

c - 将数组结构传递给函数

c - 解释为什么 fork 会导致 IF 条件表现不同。

c - 段错误何时发生?

c++ - 当我将一个字符串放入节点->名称时,为什么会出现段错误(核心已转储)?

c - ./geany_run_script.sh : Segmentation fault

php - 是否可以将 getaddrinfo() 设置为默认仅检索 IPV4 地址?

c - strndup 调用正在破坏堆栈帧