A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 米匠 中级黑马   /  2014-10-10 21:23  /  2511 人查看  /  26 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义了一个二维数组,想改变第二个元素,为什么如下方法编译不通过呢?
char names2[3][10] = {"jack", "rose", "tom"};


names2[1] = "lucy";



error: lvalue required as left operand of assignment

26 个回复

正序浏览
米匠 中级黑马 2014-10-12 21:49:33
27#
John_chow 发表于 2014-10-12 19:02
你是想把rose的内容变成lucy么?   三行十列的这个二维数组,rose应该存放在names2[0][1]中吧 ...

name2[0][1] == 'a'
回复 使用道具 举报
你是想把rose的内容变成lucy么?   三行十列的这个二维数组,rose应该存放在names2[0][1]中吧
回复 使用道具 举报
米匠 中级黑马 2014-10-12 18:43:08
25#
赵志文 发表于 2014-10-11 21:05
char names2[3][10] = {"jack", "rose", "tom"};
            
    strcpy(names2[1], "haha");

原来如此,,,谢啦~~~~
回复 使用道具 举报
     char names2[3][10] = {"jack", "rose", "tom"};
            
    strcpy(names2[1], "haha");
   printf("%s",names2[1]);
回复 使用道具 举报
米匠 中级黑马 2014-10-11 11:19:28
23#
x65396731 发表于 2014-10-11 11:05
我有点忘记了,不保证一定对,视频上提到过
LZ一旦这样写 char names2[3][10] = {"jack", "rose", "tom"};
...

你好像弄反了,二维字符数组可以改,而指针字符数组元素是常量不可改,,,,,还是要感谢你!
回复 使用道具 举报
我有点忘记了,不保证一定对,视频上提到过
LZ一旦这样写 char names2[3][10] = {"jack", "rose", "tom"};
则定义成了一个字符数组,它在内存中的保存位置是不可改的(是放栈还在堆,我忘记了)
但是如果LZ定义的是一个指针数组的话: 比如char *name2[3][10];这样后面就可以改的。
另外LZ这样写names2[1] = "lucy";变成一维数组了,肯定就不对了.
回复 使用道具 举报
米匠 中级黑马 2014-10-10 23:39:24
21#
魔法少年十三 发表于 2014-10-10 22:50
http://blog.csdn.net/wangshiyu13/article/details/39570797
这是我的笔记,你可以参考一下 ...

真的很不错,,,有为青年!哈哈
回复 使用道具 举报
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

http://blog.csdn.net/wangshiyu13/article/details/39570797
这是我的笔记,你可以参考一下
回复 使用道具 举报
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

自定义字符串那块
回复 使用道具 举报
米匠 中级黑马 2014-10-10 22:39:25
18#

没见过strcpy这个函数,这个是在哪章里的
回复 使用道具 举报

模仿strcpy这个函数吧
回复 使用道具 举报
米匠 中级黑马 2014-10-10 22:17:51
16#
魔法少年十三 发表于 2014-10-10 22:15
如果我没有记错的话黑马给的教程里只有逐一字符修改

好像真是这样
回复 使用道具 举报
米匠 发表于 2014-10-10 21:52
我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串 ...

如果我没有记错的话黑马给的教程里只有逐一字符修改
回复 使用道具 举报
米匠 中级黑马 2014-10-10 22:13:25
14#
本帖最后由 米匠 于 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:09:53
13#
米匠 发表于 2014-10-10 22:06
我定义的数组是这样的  char names2[3][10] = {"jack", "rose", "tom"};

这样就改不了呢? ...

其实没必要一直纠结。如果指针可以快捷方面的完成一个功能,就用指针。:(
其实你这样定义的话,我也不知道怎么改,就会指针改。学艺不精啊。。。
回复 使用道具 举报
米匠 中级黑马 2014-10-10 22:06:43
12#

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

这样就改不了呢?
回复 使用道具 举报
孙林 高级黑马 2014-10-10 21:59:16
11#
#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 21:52:06
10#
魔法少年十三 发表于 2014-10-10 21:47
既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先 ...

我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串
回复 使用道具 举报
米匠 中级黑马 2014-10-10 21:51:02
9#
魔法少年十三 发表于 2014-10-10 21:47
既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先 ...

指针学完了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马