2014-03-30 63 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); 
}