为什么字符串指针定义初始值这个位置会报错

img


不懂为什么书上就是这样定义就没有报错但是我自己这样定义就不行

这是个指针数组。里面存了五个char*类型的指针变量,用来指向五个字符串。所以你应该只能把地址赋值给它,不能直接把字符串赋值给它。

这代码在g++下给个警告,vc直接报错。
字符串常量用const char*,这种不能更改字符内容
或者用char name[5][20]。这种方式后面交换需要用strcpy

【以下回答由 GPT 生成】

问题的原因是你将字符串指针定义为了一个数组,而不是一个指针。在这种情况下,你需要使用指针数组(char name[5])而不是字符串指针(char name)来存储字符串的地址。

解决方案:

首先,将char name[5]改为char name,这样定义一个字符串指针。然后,在执行排序之前,为字符串指针分配内存并将字符串的地址存储在每个指针中。

修改后的代码如下:

#include<iostream>
#include<vector>
#include<cstring>

using namespace std;

int main() 
{
    char* name[5];
    char* pt;
    int i, j, k;

    // Assigning addresses of strings to the pointer array
    name[0] = "ihuac";
    name[1] = "hexiaomig";
    name[2] = "hangli";
    name[3] = "sufei";
    name[4] = "chenbao";

    // Sorting the array of strings
    for(i=0; i<4; i++) {
        k = i;
        for(j=i+1; j<5; j++) {
            // Comparing the strings using strcmp function
            if(strcmp(name[i], name[j]) > 0) 
                k = j;
        }
        if(k != i) {
            // Swapping the strings
            pt = name[k];
            name[k] = name[i];
            name[i] = pt;
        }
    }

    return 0;
}

这样修改后的代码应该可以正确编译和执行。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^