九歌当下 发表于 2024-2-17 21:54:22

运用指针数组存放字符串,编译后为什么会有警告

#include <stdio.h>

int main(void)
{
        char *p2 = {
                "让编程改变世界 -- 鱼C工作室",
                "Just do it -- NIKE",
                "一切皆有可能 -- 李宁",
                "永不止步 -- 安踏",
                "One more thing -- apple"
        };
               
        for (int i = 0; i < 5; i++)
        {
                printf("%s\n", p2);
        }
       
        return 0;
}


运用指针数组存放字符串,编译后为什么会有警告

FishC 发表于 2024-2-17 21:54:34

这个警告是因为你在定义指针变量`p2`时,使用了花括号来初始化它。但是指针变量需要初始化为一个地址,而不是一个字符串数组。

要解决这个问题,你可以将`p2`修改为一个指向字符串指针的数组,并为每个字符串分配内存。修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p2[] = {
      "让编程改变世界 -- 鱼C工作室",
      "Just do it -- NIKE",
      "一切皆有可能 -- 李宁",
      "永不止步 -- 安踏",
      "One more thing -- apple"
    };

    for (int i = 0; i < 5; i++)
    {
      printf("%s\n", p2);
    }

    return 0;
}

在这里,我们定义了一个指向字符串指针的数组`p2`,并将每个字符串的地址赋值给相应的指针变量。然后在循环中通过`p2`访问每个字符串并打印出来。现在编译时就不会有警告了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 2024-2-18 08:02:39

C 程序中遇到的警告消息是由于:

将字符串常量分配给char*类型的指针数组。
在 C 语言中,字符串常量是不可修改的,它们通常存储在程序的只读数据段中。

因此,这些字符串应该通过const char*类型的指针引用,以表明指针指向的字符串是不可修改的。

要解决这个警告,鱼油应该将 p2 数组声明为指向 const char 的指针数组,如下所示:

#include <stdio.h>

int main(void)
{
      const char *p2 = {
                "让编程改变世界 -- 鱼C工作室",
                "Just do it -- NIKE",
                "一切皆有可能 -- 李宁",
                "永不止步 -- 安踏",
                "One more thing -- apple"
      };
               
      for (int i = 0; i < 5; i++)
      {
                printf("%s\n", p2);
      }
      
      return 0;
}
页: [1]
查看完整版本: 运用指针数组存放字符串,编译后为什么会有警告