| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1179 人关注过本帖
标题:二级指针的问题
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:20 回复次数:13 
二级指针的问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void input (char **str, int n)
{
    int i, j;
    for (i = 0; i < n ; i++);
    {scanf("%s", str[i]);puts(str[i]);}    我的想法是开辟一个[N][50]的二维数组,每一维存放一个字符串。刚输入,程序就蹦了。找不到那里有问题,也没有警告。别说数组指针了(*str)[50],我想用二级指针做。谢谢!!!
}
int main ()
{
    int i, j, n;
    char **str;
    while(1)
    {
        scanf("%d", &n);
        str = (char **)malloc(n* sizeof(char *));
        for (i = 0; i < 50; i++)
        str[i] = (char *)malloc (50 * sizeof(char));
        input(str, n);
        for (i =0; i < n; i++)
        free(str[i]);
        free(str);
    }
}
搜索更多相关主题的帖子: include 
2017-03-31 19:11
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:5 
感觉似乎要在子函数里面分配空间,你把分配和释放空间函数移到子函数中试试。
2017-03-31 20:06
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:5 
不能使用字符串直接对一个字符数组直接赋值!
比如你定义char a[10];
你不能用a="str";来对a进行赋值,你只能逐个赋值;

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2017-03-31 21:23
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 3楼 Alien_Lee
void input (char (*str)[50], int n)
{
    int i;
    char (*p)[50];
    for (p = str; p < str + n; p++)
    scanf("%s",*p);

}
不一样吗?你说的是一维数组,不能向首地址赋值。这是二维数组,每一维就是一个字符数组。上面数组指针就是正确的。
2017-03-31 21:40
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 ehszt
没问题的。哪里分配都一样
2017-03-31 21:41
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void input (char **str, int n)
{
    int i, j;
    for (i = 0; i < n ; i++)              //这里不要分号
    {scanf("%s", str[i]);puts(str[i]);}   
}
int main ()
{
    int i, j, n;
    char **str;
    while(1)
    {
        scanf("%d", &n);
        str = (char **)malloc(n* sizeof(char *));
        for (i = 0; i < n; i++)                  //这里50改为n
        str[i] = (char *)malloc (50 * sizeof(char));
        input(str, n);
        for (i =0; i < n; i++)
        free(str[i]);
        free(str);
    }
}
2017-03-31 21:45
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:5 
回复 楼主 Emotiona
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 #include<string.h>

 void input (char **str, int n)

 {
     int i;
     for (i = 0; i < n ; i++)
     {
         scanf("%s", str[i]);
         puts(str[i]);
     } 
}

 int main ()

 {
     int i = 0;
     int n = 0;
     char **str = NULL;
     while(1)
     {
         scanf("%d", &n);
         str = (char **)malloc(n* sizeof(char *));
         memset(str, '\0', sizeof(str));
         for (i = 0; i < n; i++)
         {
             str[i] = (char *)malloc (50 * sizeof(char));
             memset(str[i], '\0', sizeof(str[i]));
         }
        
         input(str, n);

         for (i =0; i < n; i++)
         {
             free(str[i]);
         }
       
         free(str);
     }

 }
2017-03-31 21:46
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 6楼 yangfrancis
谢谢大虾。我智障了,分号的问题。50是行的。假如n为1 2的话字符串长度太短,不合理。
2017-03-31 22:06
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 7楼 烟雨晨曦
谢谢大虾是for循环多打了分号。 我想问问这句是什么意思         
memset(str[i], '\0', sizeof(str[i]));  
2017-03-31 22:08
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 ehszt
for循环外多个了个分号的问题。
2017-03-31 22:09
快速回复:二级指针的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012843 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved