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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D调的沉默 中级黑马   /  2014-4-18 15:13  /  1599 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 D调的沉默 于 2014-4-19 09:36 编辑

问题如下,如何定义一个指向字符串数组的指针。
我是这么定义的
  1. char *str[6];
  2. for(int i=0;i<6;i++)
  3. {
  4. printf("第%个字符串",i);
  5. gets(str[i]);
  6. }
复制代码

然后每次输入到第二个字符串的时候就提醒exc_BAD_ACCESS

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

9 个回复

倒序浏览
不知道为什么,我自己编辑自己的页面一直转圈中,这里补充一下我的问题,我不要使用二维数组接受六串字符串,一定要使用指针
回复 使用道具 举报
本帖最后由 伍叶竹 于 2014-4-18 15:33 编辑

数组名就是一个指针吧?它的指向是数组里面第一个元素的地址。你如果是想定义一个字符串数组的话,定义语句就不对?(好久没看c了)

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
本帖最后由 微尘•逐梦 于 2014-4-18 16:30 编辑
  1. char *str[6];
  2.     for(int i=0;i<6;i++)
  3.     {
  4.         printf("输入第%i个字符串",i);
  5.         
  6.         gets(&str[i]);//将这里改成地址就能正常运行了
  7.    
  8.     }
复制代码

gets(char *)这个函数传入的参数应该是指针或地址,所以应改成&str,&str是字符创str[j]的首地址。
回复 使用道具 举报
本帖最后由 星河鹭起 于 2014-4-18 16:50 编辑

因为你使用的是指针,所以我觉得你应该获取的是变量的地址,并不是变量,应该改为如下:  
  char *str[6];
    for(int i=0;i<6;i++)
    {
    printf("第%个字符串",i);
    gets(&str中括号i中括号);//这个地方我&str中括号i中括号,打不出来,所以用中文代替了,不知道怎么回事
    }

注:没有进行调试。

评分

参与人数 1黑马币 +2 收起 理由
jing迪 + 2

查看全部评分

回复 使用道具 举报
本帖最后由 Er01c 于 2014-4-18 16:28 编辑
  1. int main()
  2. {
  3.     char a[6];
  4.     char *p = a;
  5.     printf("请输入字符串:\n");
  6.         
  7.     scanf("%s", a); //gets(a);
  8.     printf("%s\n", p);
  9.         
  10.     a[0] = 'A'; // 修改字符数组中的字符
  11.     printf("%s\n", p);

  12.     return 0;
  13. }
复制代码

回复 使用道具 举报
  1. char *str[6];
  2.     for(int i=0;i<6;i++)
  3.     {
  4.         printf("输入第%i个字符串",i);
  5.         
  6.         gets(&str[i]);//将这里改成地址就能正常运行了
  7.    
  8.     }
复制代码

对不起,我上边的回答有打错字的地方,在这里重新回答。
gets(char *)这个函数传入的参数应该是指针或地址,在这个指针字符串*str中&str是字符串str[j]的首地址,所以应改成&str,。
回复 使用道具 举报
伍叶竹 发表于 2014-4-18 15:31
数组名就是一个指针吧?它的指向是数组里面第一个元素的地址。你如果是想定义一个字符串数组的话,定义语句 ...

定义语句是对的,而且直接赋值也是对的,我这边有问题的是gets函数有问题,好像楼下的是正解。我去试下再说
回复 使用道具 举报

你这个我会,我想要的是指针数组,指向二维数组的,你又给我来个指向以为数组的指针,而且gets和scanfs的功能不是完全一样的,你可以去查一下
回复 使用道具 举报
微尘•逐梦 发表于 2014-4-18 16:35
对不起,我上边的回答有打错字的地方,在这里重新回答。
gets(char *)这个函数传入的参数应该是指针或地址 ...

恩你的是正解,最早我试了好多次都没成功,才来提问的,然后看没人回答,被迫改成二维数组了。指针方面的东西确实有时候不太好理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马