获取函数的指针以用于其他函数

时间:2015-04-13 16:51:27

标签: c function pointers

我需要帮助

我想在函数中返回一个字符串并在另一个字符串中使用?

char *randString() {
    int n =  (0 + rand() % ( 4 - 0 ));
    char cadena[5][100] ={
        {"Duck"},
        {"Taxi"},
        {"Hola Mundo!"},
        {"Paris"},
        {"Lexugon"}
    };
    return cadena[n] ;
}

我希望得到主要功能并发送给用户的另一个功能......

int main (){
    srand(time(NULL));

    int contador = 0;
    /*while (  contador < 100 ){
        char* ptr = randString();
        printf ( "%s\n", ptr );

        contador++;
    }*/
    char *ptr=randString();
    compare( ptr );

    getchar();
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您无法返回来自自动存储中的本地数组的字符串,但如果您声明了数组static和/或将其声明移动到外部范围,则可以执行此操作:

static char cadena[5][100] ={
    {"Duck"},
    {"Taxi"},
    {"Hola Mundo!"},
    {"Paris"},
    {"Lexugon"}
};

char *randString() {
    return cadena[rand() % 5] ;
}

当超出范围时,不允许在自动存储区域中引用变量;这将是未定义的行为。静态存储中的对象仍然有效。

在外部作用域中声明cadena静态可确保名称从其他翻译单元保持“不可见”,从而确保不同C文件中的另一个cadena的声明不会创建名称冲突

答案 1 :(得分:0)

编辑: 为了使用main中的其他函数,您必须将char []从main传递到randString函数并更改它,然后返回void,因为字符串已被更改。

最终解决方案

主要:

int sizeOfCadena = ;//number of Strings to generate.
char cadena[5][100] = {
    {"Duck"},
    {"Taxi"},
    {"Hola Mundo!"},
    {"Paris"},
    {"Lexugon"}
};
  • DELETE RandString并替换为:*

    char *result = cadena[(rand() % 5)];
    

答案 2 :(得分:0)

而不是

char cadena[5][100] ={ ...

使用static函数变量。

static char cadena[5][100] ={ ...

还使用:

int n =  (0 + rand() % ( 4 - 0 ));

永远不会返回数组的第5个元素。如果要包含它,请使用

int n =  (rand() % 5);