更改 char 指针数组中的字符串

标签 c arrays string pointers char

我有这两个数组,代码块不会给我任何构建错误,但每当我运行它时,它都会给出“段错误”并关闭程序我已经对其进行了调试,发现我无法更改值从 names1 这种方式,但改变 names2 这种方式工作得很好,有没有办法让这个工作?如果是,我如何让 trocanames1 工作?

void troca(char* frase){
    unsigned i=0;
    while(*(frase+i)!='\0') {
        if(*(frase+i)=='O') {
            *(frase+i)='0';
        }
    i++;
    }
}

int main(){
    char *names1[]={"JOAO","MANUEL","ROBERTO","ZE"};
    char names2[][51]={"JOAO","MANUEL","ROBERTO","ZE"};
    unsigned i;
    for(i=0;i<4;i++) {
        troca(names2[i]);
    }
    return 0;
}

最佳答案

区别在于:

names1简单地声明为字符串指针数组,没有其他定义的特征。此处使用字符串文字会将字符串文字放入可执行文件中的只读部分,因为编译器可以通过这种方式重新使用它们。例如,当您使用char* a = "abc"; char* b = "abc";时那么很可能ab将具有与值相同的内存地址。这意味着您无法修改它们,因此您会收到“段错误”(同一错误的另一个名称是“访问冲突”)。

names2被声明为字符数组的数组。分配一个字符串文字会将字符串的数据复制到数组中,并且由于没有 const在代码中,数组必须是可变的,因此存储在 char 数组中的字符串也是可变的。

关于更改 char 指针数组中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37172011/

相关文章:

更改宏部分,让两个输出具有相同的值

c - 通过知道线程名称来设置线程的优先级

C指针算术数组删除字符

javascript - 在字符串中查找大写字符

c - 将项目添加到链接列表

c# - 使用Linq从String []返回过滤后的String []

python - 优化包含所有给定短语的句子

javascript - Jquery字符串替换无法在前后添加html元素

php - str_replace 为一堆代码 php

C - 如何从文件中获取没有数字、特殊字符(、.?&)的单词?