[英]C- Declaring char arrays
我是 C 新手,在為類項目聲明字符數組時遇到問題。 這大致是我在做什么:
char test[]="Test\0";
char *Pointer;
Pointer=test;
然后我有一個函數printString(char* chars)
將 Pointer 作為參數。 當我嘗試編譯時,我被告知既沒有聲明 test 也沒有聲明 Pointer。 我不知道為什么,所以有人可以指出我正確的方向。
這是整個代碼:
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++;
}
}
首先,沒有必要在那里使用 NULL 字符。
原因如下:
當一個字符數組被聲明並被初始化時,就像在你的例子中一樣:
char test[] = "Test";
編譯器會將“Test”中的字符放入 test 數組中,然后添加一個空字符,以便 test 可以用作字符串,如下所示:
+---+---+---+---+----+
test| T | e | s | t | \0 |
+---+---+---+---+----+
關於你的問題,看看這是否有幫助:
void print_string( char *p ) {
while ( *p != '\0' ) {
printf( "%c", *p );
p++;
}
}
請記住,C 風格的字符串是一個字符序列,它總是以 NULL 字符結尾。
例如,函數“print_string”需要一個指向 char 的指針作為參數(您可以傳遞您創建的 char 數組,它會起作用,因為數組被視為指針。)該函數將打印每個字符,直到 NULL 字符遇到了。
重要的:
char test[] = "Test";
char *test_2 = "Test";
在數組版本中,可以修改存儲在 test 中的字符,就像任何數組的元素一樣。 在指針版本中,測試指向字符串文字,不應修改字符串文字。
我相信問題可能是因為這個原因,您正在嘗試修改字符串文字。 這樣做會導致未定義的行為。
使用數組或分配內存並使 char 指針指向它。
使用你的函數:printString(char* chars)。
只聲明:
char *my_string = "Test";
printString(my_string);
問題可能是因為您在使用該函數之前沒有聲明它。 在 C 中,您確實必須在使用之前聲明所有內容。 在這種情況下做例如
void printString(char* charArray);
int main(void)
{
...
}
void printString(char* charArray)
{
...
}
對不起...但是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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.