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/