[英]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.