【问题标题】:C Programming: Initialize pointer to char array inside a functionC 编程:在函数内初始化指向 char 数组的指针
【发布时间】:2015-04-07 23:31:26
【问题描述】:

我需要帮助来初始化指向 char 数组的指针在另一个函数中。

我将 char 数组指向 char 数组的指针 传递给一个函数。 我想通过地址/引用/指针将变量“单词”中的字符复制到“秘密”。

我可以通过将值传递给这样的函数来做到这一点:

char    *set_secret(char *word, char *secret)
{
    int     i;

    for (i = 0; word[i] != '\0'; i++)
    {
        if (word[i] == ' ')
            secret[i] = ' ';
        else
            secret[i] = SECRET_SYMBOL;
    }
    secret[i] = '\0';

    return(secret);
}

如何通过引用将字符复制到char数组的指针中


这是我所拥有的(检查了 malloc,一切都很好):

来源:

void    init_secret(const char *word, char **secret)
{
    int     i;
    *secret = NULL;
    *secret = (char*)malloc( sizeof(char) * strlen(word) + 1 );

    // trying changing secret value by reference and not by value (copy)
    for (i = 0; word[i] != '\0'; i++)
    {
        if (word[i] == ' ')
            *secret[i] = ' ';
        else
            *secret[i] = '_';
    }
    *secret[i] = '\0';
}

int     main(void)
{
    char    *str = "TALK TO THE HAND";
    char    *secret = NULL;

    init_secret(str, &secret);
    printf("Secret word: %s\n", secret);

    return(0);
}

输出:

Bus error: 10

【问题讨论】:

标签: c string function pointers


【解决方案1】:

只需索引*secret:

(*secret)[i]

或使用 char* 帮助变量:

char* s = *secret; ...

【讨论】:

  • 您能解释一下它是如何工作的吗?我真的以为 *secret[i] 就是它。
  • @Jean-BaptisteBouhier * 的优先级低于 []。还可以考虑只将您的字符串文字分配给char const*,并启动您的编译器警告。
  • @Quentin 喜欢 gcc -Wall -Wextra -Werror file.c 吗?你会推荐哪些标志?
  • @Jean-BaptisteBouhier -Wwrite-strings 具体而言,或-std=* 使用其中一种标准。尽管我真的很惊讶默认(我相信是 gnu89)没有发出警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多