标题:百思不得其解
只看楼主
liumang_D
Rank: 2
来 自:计算机
等 级:论坛游民
威 望:1
帖 子:89
专家分:50
注 册:2008-10-20
得分:0 
char *p[10];
定义的是十个指针,并没有空间。

char *p[4] = {"hhaahha", "afadf", "af", "adafd"};是正确的,因为他是赋初值啊,正如:
char *p = "haahahah";一样啊。你在你程序中的做法就如同这样:char *p; p = "hahahaha";所以错误,在你程序中,你定义一个二维数组就没事了。

给你附加点知识:scanf(“%s”,str);str一定要是一个数组的名,因为数组肯定是指定了空间了哦,你可以运行一下下面这个程序,我想结果肯定和你程序出现的错误一样
#include<stdio.h>
int main ()
{
    char *p;
    scanf("%s",p);
    printf("result: %s\n", p);
}
2008-11-15 02:27
liu155279560
Rank: 1
等 级:新手上路
帖 子:21
专家分:4
注 册:2008-11-13
得分:0 
回复 1# 的帖子
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void px(char *p[]);
int main(void)
{
    char *a[10];
    int o;
    for(o=0;o<10;o++)
    {
        a[o]=(char *)malloc(4);
        if(a[o]==NULL)
        {
            printf("失败");
            exit(1);
        }
    }
    for(o=0;o<10;o++)
    {
        scanf("%s",a[o]);
    }
    printf("\n");
    
    px(a);
    for(o=0;o<10;o++)
        printf("%s\n",a[o]);
    return 0;
    }
void px(char *p[])
{
    char *temp;
    int i,j,k;
    for(i=0;i<9;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
    
            if(strcmp(p[k],p[j])>0)k=j;
            if(k!=i){temp=p[i];p[i]=p[k];p[k]=temp;}
        
    }
}
2008-11-15 16:01
a370413564
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2008-1-3
得分:0 
[bo][un]网易[/un] 在 2008-11-14 22:57 的发言:[/bo]

char *p[10];
scanf("%s",p);
//这种写法应该是错误的   

等待他人详细解答中……

正解..!  char *p[10]; 目前不只到指向拿里.!如果在用scanf("%s",p);把这字符串的放到那里去.!所以出现内存无法写..!!
先初始化试试 .? char *p[10]={"a","b",...."n"};
2008-11-15 17:31
liu155279560
Rank: 1
等 级:新手上路
帖 子:21
专家分:4
注 册:2008-11-13
得分:0 
回复 13# 的帖子
不是把所输入的数据存储到所开辟的
for(o=0;o<10;o++)
    {
        a[o]=(char *)malloc(4);
        if(a[o]==NULL)
        {
            printf("失败");
            exit(1);
        }
    }
内存空间了吗?
你运行一下
我试了,是完全可以操作的
2008-11-16 09:48
liu155279560
Rank: 1
等 级:新手上路
帖 子:21
专家分:4
注 册:2008-11-13
得分:0 
急乎高手,来给解释解释啊
2008-11-16 09:49
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
程序实现的功能应该是排列字符串吧,LZ对地址搞的好像不太清

作鲲鹏,遨游于天地沧海
2008-11-16 14:26
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
修改后程序如下:
#include<stdio.h>
#include<string.h>
main()
{
    void px(char **p);//---------------------声明放程序开始处
    char str[10][10],(*p)[10];//-----------------指针数组需要赋初值,所以改为指向数组的指针
    int i=0;
    p=str;//-------------------------------------指针初始化
    do
      {
        printf("input number%d string\n",i+1);
        scanf("%s",*(p+i));//-------------赋值
        fflush(stdin);//-------两个scanf之间最好清一下输入缓存
        i++;
       }while(i<10);
     px(p);
     printf("result:\n");
     for(i=0;i<10;i++)
       printf("%s\n",*(p+i));//--------------------------更改
}
void px(char (*p)[10])//--------------------------更改
{
     char temp[10];//----------------------------交换值而不是指针
     int i,j,k;
     for(i=0;i<9;i++)
      {  k=i;
         for(j=i+1;j<10;j++)//-------------------j++
         if(strcmp(*(p+k),*(p+j))>0)  k=j;//------------------------更改
         if(k!=i)
         {
            strcpy(temp,*(p+k));//-------------------字符串之间不能直接赋值
            strcpy(*(p+k),*(p+i));
            strcpy(*(p+i),temp);
         }
       }
 }

[[it] 本帖最后由 jdh99 于 2008-11-16 14:33 编辑 [/it]]

作鲲鹏,遨游于天地沧海
2008-11-16 14:27
jdh99
Rank: 2
来 自:南师大
等 级:论坛游民
威 望:1
帖 子:59
专家分:15
注 册:2008-11-7
得分:0 
示例输入输出如下:
input number1 string
china
input number2 string
usa
input number3 string
japan
input number4 string
canada
input number5 string
india
input number6 string
england
input number7 string
asia
input number8 string
france
input number9 string
jermany
input number10 string
russia
result:
asia
canada
china
england
france
india
japan
jermany
russia
usa
Press any key to continue

作鲲鹏,遨游于天地沧海
2008-11-16 14:27
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
得分:0 
char *p[10];
应该是
char (*p)[10];
2008-11-17 00:33
wrn_hbu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-11-13
得分:0 
指针要有具体指向,可以试着定义数组或使用malloc动态开辟一个数组.
2008-11-18 08:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-244281-1-1.html




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

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