最后一个难题是在C中更改此功能

时间:2016-03-24 09:49:18

标签: c arrays string pointers

我必须使用指针而不是int i更改此函数,我有问题,因为我的直觉告诉我使用char指针并且每次都增加指向下一个字符串的指针但是我不知道如何实现这一点。

这是我到目前为止所做的:

populate_demo()

{
    int i;
    for (i=0; evalue[i][0] ; i++)
        env_add("DEMO",evalue[i]);
}

我一直在尝试当然不像我没试过但我似乎无法完成我需要的是我的代码

int main()
{
char array1[4][6]={"one","two","three","four"};
char *p;
p=array1[0];
*p++;
printf("%s",p);
return 0;
}

预期结果:printf打印"两个"。但是转到第一个字符串的下一个字符并打印ne,直到它找到\0。所以我的问题是如何转到下一个字符串?

1 个答案:

答案 0 :(得分:3)

如果您有这样的数组

char array1[4][6]={"one","two","three","four"};

然后指向其第一个元素的指针看起来像

char ( *p )[6] = array1;  

因此你可以写例如

printf( "%s", *p );

printf( "%s", *++p );

printf( "%s", *p++ );

这是一个示范程序

#include <stdio.h>

#define N   6

void populate_demo( char evalue[][N] )
{
    for ( ; ( *evalue )[0]; ++evalue ) puts( *evalue );
}    

int main( void )
{
    char array1[][N] = { "one", "two", "three", "four", "" };

    populate_demo( array1 );

    return 0;
}

程序输出

one
two
three
four

如果数组不包含空字符串,则上面的程序可以采用以下方式

#include <stdio.h>

#define N   6

void populate_demo( char evalue[][N], size_t n )
{
    for ( char ( *p )[N] = evalue; p != evalue + n; ++p ) puts( *p );
}    

int main( void )
{
    char array1[][N] = { "one", "two", "three", "four" };

    populate_demo( array1, sizeof( array1 ) / sizeof( *array1 ) );

    return 0;
}

程序输出将是相同的。

如果编译器支持可变大小的数组,您也可以将它们用作函数参数。