为什么我从控制台获得以下代码?
char array1[] = "Hello World";
char ch = array1;
printf(" %s" , ch);
Run Code Online (Sandbox Code Playgroud)
(我们被指示不要用指针执行此操作)
因为你需要使ch 指向一个字符.编译器应该给你,你给一个字符变量分配一个字符指针的警告,并且它应该警告你,你试图printf("%s")在非字符指针变量-如果没有,你应该把提高编译器的警告级别!
只需添加一个容易被遗忘的小星星就可以正常工作:
#include <stdio.h>
int main()
{
char array1[] = "Hello World\n";
char *ch = array1; printf(" %s" , ch);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
main为了完整起见,我还冒昧地在字符串的末尾添加换行符并将其置于适当的函数中.
我只是注意到你说你"不允许用指针执行此操作" - 几乎唯一的另一种方法是逐字符打印,直到你找到一个空终止符:
#include <stdio.h>
int main()
{
char array1[] = "Hello World\n";
int i;
for (i = 0 ; array1[i] != '\0' ; i++)
{
printf("%c", array1[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out Hello World
一个更强大的方法是对你打印出来的字符数量进行限制,但只是检查对于\0看似作业的作业来说可能已经足够了.