黑马程序员技术交流社区

标题: 刚刚遇到个问题,求解 [打印本页]

作者: 米匠    时间: 2014-10-10 21:23
标题: 刚刚遇到个问题,求解
定义了一个二维数组,想改变第二个元素,为什么如下方法编译不通过呢?
char names2[3][10] = {"jack", "rose", "tom"};


names2[1] = "lucy";



error: lvalue required as left operand of assignment

作者: 魔法少年十三    时间: 2014-10-10 21:30
都是二维数组了,那names2[1]是个啥
作者: 米匠    时间: 2014-10-10 21:36
魔法少年十三 发表于 2014-10-10 21:30
都是二维数组了,那names2[1]是个啥

names[1] 应该是“r”的地址,,,,可是我怎么把从“r”的地址开始到“\0”变成“lucy”呢?
作者: 孙林    时间: 2014-10-10 21:39
错误貌似是:你左边的操作的数需要赋值。你改成names2[1][10]试试。。。
作者: 魔法少年十三    时间: 2014-10-10 21:47
米匠 发表于 2014-10-10 21:36
names[1] 应该是“r”的地址,,,,可是我怎么把从“r”的地址开始到“\0”变成“lucy”呢? ...

既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先放下这个
作者: 米匠    时间: 2014-10-10 21:48
孙林 发表于 2014-10-10 21:39
错误貌似是:你左边的操作的数需要赋值。你改成names2[1][10]试试。。。

这样不行,names2[1][10]是第二个字符串中第10个字符
作者: 米匠    时间: 2014-10-10 21:49
刚刚试了一下   scanf("%s", names2[1]);     这样是可以把rose替换成输入的字符串的,可是我不想通过输入的方式替换,有没有其他办法?
作者: 孙林    时间: 2014-10-10 21:49
米匠 发表于 2014-10-10 21:48
这样不行,names2[1][10]是第二个字符串中第10个字符

嗦嘎。待我去试试再来作答。。。
作者: 米匠    时间: 2014-10-10 21:51
魔法少年十三 发表于 2014-10-10 21:47
既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先 ...

指针学完了
作者: 米匠    时间: 2014-10-10 21:52
魔法少年十三 发表于 2014-10-10 21:47
既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先 ...

我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串
作者: 孙林    时间: 2014-10-10 21:59
#include <stdio.h>

int main()
{
    char *names2[3] = {"jack", "rose", "tom"};
    //把rose换成Jim
    names2[1] = "jim";
    for (int i = 0; i < 3; i++) {
        printf("%s\n", names2[i]);
    }
   
}
这样子是可以改的。
作者: 米匠    时间: 2014-10-10 22:06
孙林 发表于 2014-10-10 21:59
#include

int main()

我定义的数组是这样的  char names2[3][10] = {"jack", "rose", "tom"};

这样就改不了呢?
作者: 孙林    时间: 2014-10-10 22:09
米匠 发表于 2014-10-10 22:06
我定义的数组是这样的  char names2[3][10] = {"jack", "rose", "tom"};

这样就改不了呢? ...

其实没必要一直纠结。如果指针可以快捷方面的完成一个功能,就用指针。:(
其实你这样定义的话,我也不知道怎么改,就会指针改。学艺不精啊。。。
作者: 米匠    时间: 2014-10-10 22:13
本帖最后由 米匠 于 2014-10-10 22:41 编辑
孙林 发表于 2014-10-10 22:09
其实没必要一直纠结。如果指针可以快捷方面的完成一个功能,就用指针。
其实你这样定义的话,我也不知 ...

用了个笨招,这样好使了

#include <stdio.h>
#include <string.h>
int main()
{   
    char names2[3][10] = {"jack", "rose", "tom"};
    char *a = "lucy";
    int size = strlen(a);
   
    for (int i=0; i<size; i++) {
        names2[1]【i】 = a【i】;
    }

    printf("%s\n", names2[1]);

    return 0;
}刚刚粘错了,修正一下

作者: 魔法少年十三    时间: 2014-10-10 22:15
米匠 发表于 2014-10-10 21:52
我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串 ...

如果我没有记错的话黑马给的教程里只有逐一字符修改
作者: 米匠    时间: 2014-10-10 22:17
魔法少年十三 发表于 2014-10-10 22:15
如果我没有记错的话黑马给的教程里只有逐一字符修改

好像真是这样
作者: 魔法少年十三    时间: 2014-10-10 22:32
米匠 发表于 2014-10-10 22:17
好像真是这样

模仿strcpy这个函数吧
作者: 米匠    时间: 2014-10-10 22:39
魔法少年十三 发表于 2014-10-10 22:32
模仿strcpy这个函数吧

没见过strcpy这个函数,这个是在哪章里的
作者: 魔法少年十三    时间: 2014-10-10 22:47
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

自定义字符串那块
作者: 魔法少年十三    时间: 2014-10-10 22:50
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

http://blog.csdn.net/wangshiyu13/article/details/39570797
这是我的笔记,你可以参考一下
作者: 米匠    时间: 2014-10-10 23:39
魔法少年十三 发表于 2014-10-10 22:50
http://blog.csdn.net/wangshiyu13/article/details/39570797
这是我的笔记,你可以参考一下 ...

真的很不错,,,有为青年!哈哈
作者: x65396731    时间: 2014-10-11 11:05
我有点忘记了,不保证一定对,视频上提到过
LZ一旦这样写 char names2[3][10] = {"jack", "rose", "tom"};
则定义成了一个字符数组,它在内存中的保存位置是不可改的(是放栈还在堆,我忘记了)
但是如果LZ定义的是一个指针数组的话: 比如char *name2[3][10];这样后面就可以改的。
另外LZ这样写names2[1] = "lucy";变成一维数组了,肯定就不对了.

作者: 米匠    时间: 2014-10-11 11:19
x65396731 发表于 2014-10-11 11:05
我有点忘记了,不保证一定对,视频上提到过
LZ一旦这样写 char names2[3][10] = {"jack", "rose", "tom"};
...

你好像弄反了,二维字符数组可以改,而指针字符数组元素是常量不可改,,,,,还是要感谢你!
作者: 赵志文    时间: 2014-10-11 21:05
     char names2[3][10] = {"jack", "rose", "tom"};
            
    strcpy(names2[1], "haha");
   printf("%s",names2[1]);
作者: 米匠    时间: 2014-10-12 18:43
赵志文 发表于 2014-10-11 21:05
char names2[3][10] = {"jack", "rose", "tom"};
            
    strcpy(names2[1], "haha");

原来如此,,,谢啦~~~~
作者: John_chow    时间: 2014-10-12 19:02
你是想把rose的内容变成lucy么?   三行十列的这个二维数组,rose应该存放在names2[0][1]中吧
作者: 米匠    时间: 2014-10-12 21:49
John_chow 发表于 2014-10-12 19:02
你是想把rose的内容变成lucy么?   三行十列的这个二维数组,rose应该存放在names2[0][1]中吧 ...

name2[0][1] == 'a'




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2