C:有时会出现分段错误?

时间:2016-01-20 14:51:59

标签: c segmentation-fault

你好伙伴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"
             />

1 个答案:

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