回 帖 发 新 帖 刷新版面

主题:多个字符串的输入问题

我想写一个函数,来实现多个字符串的输入。输入要求使用指针数组控制,也就是形如
void main()
{
    char str_store[10][30];
    char *char_point[10];
    char **point;

    char_point[0] = str_store;//这一句有问题,但是不知道为什么?
    point = char_point;

    str_input( point, 10 );
    str_sort( point, 10 );
    str_output( point, 10 );

}

其中子函数为
/*********************************/
/*No.1
*入口参数:point:指向指针数组的指针变量;num:输入的字符串数。
*出口参数:无
*函数功能:完成num个字符串的输入。
*时间:                                   作者:
*/
void str_input(char **str_point, int num)
{
    int i;

    puts( "Please input the string:" );
    for (i=0; i<num; i++)
    {    scanf("%s", *(str_point+i));}
}
求高人指点问题所在?如能提供其他好的方法,赶紧不尽。

回复列表 (共3个回复)

沙发


补充提问:这个程序主要是想用指针来写,所以请大虾多在指针上找毛病;

板凳

[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void str_input( char **str_point, size_t num );
void str_sort( char **str_point, size_t num );
void str_output( char **str_point, size_t num );

int main()
{
    const size_t ARRAY_NUM = 10;
    const size_t ELEMENT_SIZE = 30;
    char str_store[ARRAY_NUM][ELEMENT_SIZE];

    char *char_point[ARRAY_NUM];
    for( size_t i=0; i!=ARRAY_NUM; ++i )
        char_point[i] = str_store[i];

    str_input( char_point, ARRAY_NUM );
    str_sort( char_point, ARRAY_NUM );
    str_output( char_point, ARRAY_NUM );

    return 0;

}

void str_input( char **str_point, size_t num )
{
    printf( "%s\n", "Please input the string:" );
    for( size_t i=0; i!=num; ++i )
    {
        scanf( "%s", str_point[i] );
    }
}

int __cdecl mycompare( const void *lhs, const void *rhs )
{
    return strcmp( *(char**)lhs, *(char**)rhs );
}
void str_sort( char **str_point, size_t num )
{
    qsort( str_point, num, sizeof(*str_point), &mycompare );
}

void str_output( char **str_point, size_t num )
{
    printf( "%s\n", "Onput the strings:" );
    for( size_t i=0; i!=num; ++i )
    {
        printf( "%s\n", str_point[i] );
    }
}
[/code]

用 gcc4.6.1 带 -std=c99 编译通过,运行结果如下
[color=0000FF]Please input the string:[/color]
ZXCVB
ASDFG
QWERT
zxcvb
asdfg
qwert
12345
09876
~!@#$%^&**()-=
01234567890123456789
[color=0000FF]Onput the strings:[/color]
01234567890123456789
09876
12345
ASDFG
QWERT
ZXCVB
asdfg
qwert
zxcvb
~!@#$%^&**()-=

3 楼


谢谢你的回答。其实主要原因就是,指针数组必须都是赋过值的,也就是说,指针数组元素一一指向存储空间中的行。

我来回复

您尚未登录,请登录后再回复。点此登录或注册