2014-03-30 89 views
-4

我是C新手,無法爲類項目聲明字符數組。 這裏大概我在做什麼:C-聲明char數組

char test[]="Test\0"; 

char *Pointer; 
Pointer=test; 

然後我有一個函數printString(char* chars)是採用指針作爲參數。當我嘗試編譯時,我被告知沒有聲明測試或指針。我不知道爲什麼,有人可以指引我走向正確的方向。

這是整個代碼:

main() 
{ 

    char *test2="Test\0"; 

    printString(test2); 
} 

printString(char* charArray) 
{ 

    int charPos=0; 
    int endOfString=1; 

    char al; 
    char ah; 
    int ax; 

    while(endOfString==1) 
    { 
      al=charArray[charPos]; 
      ah=0xE; 
      ax=ah*256+al; 

      interrupt(0x10,ax,0,0,0); 


      if(al=='\0') 
      { 
        return 0; 
      } 

      charPos++; 
    } 
} 
+3

您可以發佈您完整的代碼? – McLovin

+3

順便說一句,你不需要添加空終止符到字符串文字。這是爲你完成的。 –

+1

試試這個'指針= &test;'。 '&'讓你得到一個變量的地址。 – Biduleohm

回答

0

對於使用功能:PRINTSTRING(字符*字符)。

聲明只是:

所有的
char *my_string = "Test"; 
printString(my_string); 
+0

當我這樣做時,我被告知」無效的左值「和」my_string是undelcared「 – Evando

+0

奇怪的,在這裏發佈你的整個代碼 – Ayoros

0

首先,與具有NULL字符是沒有必要存在。

這是爲什麼:

當字符數組聲明,這是初始化,就像在你的榜樣:

char test[] = "Test"; 

編譯器會將從「測試」的人物測試陣列,然後添加一個空字符,這樣的測試可以作爲像這樣的字符串:

+---+---+---+---+----+ 
test| T | e | s | t | \0 | 
    +---+---+---+---+----+ 

在問候你的問題,看看是否有所幫助:

​​

記住一個C風格的字符串是一個字符序列,它總是以NULL字符結尾。例如,函數「print_string」需要一個指向char的指針作爲參數(你可以超越你創建的char數組,因爲數組被視爲指針,所以它將起作用)。 該函數將打印每個數組中的每個字符,直到遇到NULL字符。

重要:

char test[] = "Test"; 
char *test_2 = "Test"; 

在陣列版本,存儲在測試中的字符可以被修改,像任何數組的元素。 在指針版本中,測試指向一個字符串文字,並且字符串文字不應該被修改。

我認爲這個問題可能是因爲你試圖修改字符串。這樣做會導致未定義的行爲。

要麼使用數組,要麼分配內存,並使char指針指向它。

+0

感謝您編輯我的代碼Turbo J.我應該直接從test.c文件複製而不是寫在這裏。我仍然在學習如何在這裏編寫代碼。 –

0

問題是可能,因爲您在使用它之前沒有聲明該函數。在C中,你必須在使用之前聲明所有內容。在這種情況下,例如

void printString(char* charArray); 

int main(void) 
{ 
    ... 
} 

void printString(char* charArray) 
{ 
    ... 
} 
+0

啊,謝謝。我的新手錯誤 – Evando

0

對不起,但wtf?笑

main() 
    { 

     char *test2="Test\0"; 

     printString(test2); 
    } 

    printString(char* charArray) 
    { 

     int charPos=0; 
     int endOfString=1; 

     char al; 
     char ah; 
     int ax; 

     while(endOfString==1) 
     { 
       al=charArray[charPos]; 
       ah=0xE; 
       ax=ah*256+al; 

       interrupt(0x10,ax,0,0,0); 


       if(al=='\0') 
       { 
         return 0; 
       } 

       charPos++; 
     } 
    } 

打印字符串,只需使用:

#include <stdio.h> 
int main(void) 
{ 
    char *my_string = "Test"; 

    printf("%s", my_string); 
    return (0); 
}