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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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


names2[1] = "lucy";



error: lvalue required as left operand of assignment

26 个回复

倒序浏览
都是二维数组了,那names2[1]是个啥
回复 使用道具 举报
魔法少年十三 发表于 2014-10-10 21:30
都是二维数组了,那names2[1]是个啥

names[1] 应该是“r”的地址,,,,可是我怎么把从“r”的地址开始到“\0”变成“lucy”呢?
回复 使用道具 举报
错误貌似是:你左边的操作的数需要赋值。你改成names2[1][10]试试。。。
回复 使用道具 举报
米匠 发表于 2014-10-10 21:36
names[1] 应该是“r”的地址,,,,可是我怎么把从“r”的地址开始到“\0”变成“lucy”呢? ...

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

这样不行,names2[1][10]是第二个字符串中第10个字符
回复 使用道具 举报
米匠 中级黑马 2014-10-10 21:49:34
7#
刚刚试了一下   scanf("%s", names2[1]);     这样是可以把rose替换成输入的字符串的,可是我不想通过输入的方式替换,有没有其他办法?
回复 使用道具 举报
孙林 高级黑马 2014-10-10 21:49:54
8#
米匠 发表于 2014-10-10 21:48
这样不行,names2[1][10]是第二个字符串中第10个字符

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

指针学完了
回复 使用道具 举报
米匠 中级黑马 2014-10-10 21:52:06
10#
魔法少年十三 发表于 2014-10-10 21:47
既然数组被看做是一个地址,你将char型直接赋值给地址是不是不靠谱?
你学到指针了么,没学到的话暂时先 ...

我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串
回复 使用道具 举报
孙林 高级黑马 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 22:06:43
12#

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

这样就改不了呢?
回复 使用道具 举报
孙林 高级黑马 2014-10-10 22:09:53
13#
米匠 发表于 2014-10-10 22:06
我定义的数组是这样的  char names2[3][10] = {"jack", "rose", "tom"};

这样就改不了呢? ...

其实没必要一直纠结。如果指针可以快捷方面的完成一个功能,就用指针。:(
其实你这样定义的话,我也不知道怎么改,就会指针改。学艺不精啊。。。
回复 使用道具 举报
米匠 中级黑马 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 21:52
我并不想把字符串赋值给地址,,,但是我想知道如何修改从那个地址到“\0”的地址之间的字符串 ...

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

好像真是这样
回复 使用道具 举报

模仿strcpy这个函数吧
回复 使用道具 举报
米匠 中级黑马 2014-10-10 22:39:25
18#

没见过strcpy这个函数,这个是在哪章里的
回复 使用道具 举报
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

自定义字符串那块
回复 使用道具 举报
米匠 发表于 2014-10-10 22:39
没见过strcpy这个函数,这个是在哪章里的

http://blog.csdn.net/wangshiyu13/article/details/39570797
这是我的笔记,你可以参考一下
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马