一個簡單的程序,一個用於讀取輸入的靜態字符串,然後將其傳遞給函數。只是想知道爲什麼它使用while(* string!='\ 0')表達式找不到'\ 0'字符。行尾字符未檢測到
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_palindrome(char *string)
{
int length, mid, end, i;
length=0;
if (string == NULL)
return 0;
while (string[length] != '\0')
{
printf("%c\n", string[length]);
length++;
}
//Not working version
/*
while(*string!='\0')
length++;
*/
end = length - 1;
mid = length/2;
printf(" end=%d, mid=%d\n", end, mid);
for (i = 0; i < mid; i++) {
if (string[i] != string[end]) {
printf("It's not palindrome\n");
return 0;
}
end--;
}
if (i == mid) {
printf("It's palindrome\n");
return 1;
}
return 0;
}
int main(void)
{
char string[100];
printf("Enter a string to test for the parlindrome\n");
gets(string);
int length = strlen(string);
printf("You entered %s,length is %d\n", string, length);
if (is_palindrome(string))
;
printf("Enter to Quit\n");
char x;
scanf("%c", &x);
return 0;
}
請勿使用'gets'。你應該使用'fgets'來代替。 – squiguy 2013-04-27 02:54:01
我甚至在獲得後在最後手動添加'\ 0'。但它仍然不起作用 – fiftyplus 2013-04-27 02:55:22
'gets()'不是'\ 0''問題的原因;它會正確地終止輸入緩衝區。但它本質上是不安全的,因爲它不能防止過長的輸入;這是一個等待發生的緩衝區溢出。它甚至在最新版本的標準中從C中刪除。使用'fgets()'而不是'gets()'不會解決你所問的問題,但無論如何都要這樣做。 ('fgets()'離開字符串中的''n''字符,所以你必須處理這個問題。) – 2013-04-27 03:58:24