在C编程中转换数组字符

use*_*466 0 c

为什么我从控制台获得以下代码?

 char array1[] = "Hello World";

 char ch = array1;
 printf(" %s" , ch);
Run Code Online (Sandbox Code Playgroud)

(我们被指示不要用指针执行此操作)

Mar*_*off 6

因为你需要使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看似作业的作业来说可能已经足够了.