你好伙伴Stackoverflowers!
为什么下面的代码有时会抛出分段错误(即1/10倍)?
控制台:
输入字符串
赛车
分段错误
<TextView
android:id="@+id/tvMessages"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:background="@drawable/circular_message"
android:padding="4dp"
android:text="5"
android:textColor="@color/white_color"
android:textSize="@dimen/txt12"
android:visibility="visible"
/>
答案 0 :(得分:2)
您的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;
}