2016-11-07 95 views
-2

編譯時出現錯誤。爲什麼這段代碼從'char'錯誤獲得'char *'賦值?

incompatible integer to pointer conversion assigning to 'string' 
     (aka 'char *') from 'char'; take the address with & 

我的代碼:

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

int pallin(string A); 
int main(void) 
{ 
    printf("Enter the string to analyze\n"); 
    string S[10]; 
    S = GetString(); 
    int flag = pallin(S); 
    if(flag == 0) 
    { 
    printf("Invalid input\n"); 
    } 
    else if (flag == 1) 
    { 
    printf("Yes, the input is a pallindrome\n"); 
    } 
    else{ 
    printf("The input is not a pallindrome\n"); 
    } 
} 

int pallin(string A) 
{ 
    int flag; 
    int n = strlen(A); 
    if(n<=1) 
    { 
    return 0; 
    } 
    else 
    {string B[10];int i = 0; 

     while(A[i]!="\0") 
     { 
     B[i]=A[n-i-1]; //Getting error here. 
     i++; 
     } 

     for(int j = 0; j < n; j++) 
     { 
      if(B[j]!=A[j]) 
      { 
       flag = 2; 
      } 
      else 
      { 
       flag = 1; 
      } 
     } 
     return flag; 
    } 
} 
+1

使用'char * S'而不是'char S [10]'。我找不到'GetString()'函數。在你的代碼中,'S'是一個數組。你不能給數組賦值,你能嗎? – babon

+0

@babon:[tag:cs50]標籤wiki有關於''頭文件和特徵函數(如GetString()'和(horrid)'string' typedef)的信息。 –

+1

'GetString'返回一個'string'('char *')。你正在分配給一個由10個字符串組成的'S'。這不是一個有效的任務。 'S [0]'會起作用。定義'string S = GetString();'也可以。 'pallin()'中也有類似的混淆。請注意,「迴文」只有一個字母。 –

回答

0

我不喜歡的CS50 typedef char *string;的 - 它並不能幫助不夠,沒有引起太多的困惑。您不能使用string來聲明字符數組。

此代碼:

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

int palin(string A); 

int main(void) 
{ 
    printf("Enter the string to analyze\n"); 
    string S = GetString(); 
    int flag = palin(S); 
    if (flag == 0) 
    { 
     printf("Invalid input\n"); 
    } 
    else if (flag == 1) 
    { 
     printf("Yes, the input is a palindrome\n"); 
    } 
    else 
    { 
     printf("The input is not a palindrome\n"); 
    } 
} 

int palin(string A) 
{ 
    int flag; 
    int n = strlen(A); 
    if (n <= 1) 
    { 
     return 0; 
    } 
    else 
    { 
     char B[100]; 
     int i = 0; 

     //while (A[i] != "\0") 
     while (A[i] != '\0') 
     { 
      B[i] = A[n - i - 1]; // Getting error here. 
      i++; 
     } 

     for (int j = 0; j < n; j++) 
     { 
      if (B[j] != A[j]) 
      { 
       flag = 2; 
      } 
      else 
      { 
       flag = 1; 
      } 
     } 
     return flag; 
    } 
} 

的變化是string S = GetString();main(); char B[100]; in palin();被推翻的'迴文';使用代替"\0"(它也有其他問題;在這種情況下,它與""相同,並不是如何比較字符串(在一般意義上以及CS50意義上) - 如果需要,您需要strcmp()比較字符串,但你不在這個上下文中)。

它不釋放分配的字符串。它確實產生了正確的答案(程序名稱pa19):

$ pa19 
Enter the string to analyze 
amanaplanacanalpanama 
Yes, the input is a palindrome 
$ pa19 
Enter the string to analyze 
abcde 
The input is not a palindrome 
$ pa19 
Enter the string to analyze 

Invalid input 
$ 
相關問題