【问题标题】:Passing char by reference通过引用传递 char
【发布时间】:2019-03-29 00:44:38
【问题描述】:

问题是我试图通过引用传递一个句子来改变它的一些东西(本例添加一个字符),但没有任何改变。

我尝试的第一件事是这个原始代码,但没有输入任何“*”或“&”,我得到了相同的输出。我已经阅读了其他使用 strcpy() 的类似问题,但我不确定这可能如何适用于这个问题或解决方案可能是什么,因为我不熟悉以这种方式使用的指针。

char my_char_func(char *x)
{
    return x+'c';
}
int main()
{
    char (*foo)(char);
    foo = &my_char_func;
    char word[]="print this out";
    puts(word);
    foo(&word);
    puts(word);
    return 0;
}

我希望第二个输出是“打印这个输出”

【问题讨论】:

  • foo = &my_char_func; 是一个错误。如果您没有收到错误消息,请调整编译器设置。 foo(&word) 也是一个错误。

标签: c pointers pass-by-reference


【解决方案1】:

您正在将字符 c 添加到实际指针中。由于您无法在 C 中动态扩展字符数组,我相信您将不得不 malloc 一个新数组,其中包含额外字符的空间,删除传入的指针,然后将其设置为新数组的开头.这应该可以避免内存溢出。

int main()
{
    char (*foo)(char);
    int i = 0;
    foo = &my_char_func;
    char word[]="print this out";
    for(i = 0; i < size_of(word); ++i)
    {
       word[i] = toupper(word[i]);
    }
    puts(word);
    foo(&word);
    puts(word);
    return 0;
}

If you don't want to use toUpper, you can change you function in either of two ways:

Option 1:

void my_char_func(char *string, int sizeOfString)
{
    int i = 0;
    for(i = 0; i < sizeOfString; ++i)
    {
        //Insert logic here for checking if character needs capitalization
        string[i] = string[i] + ' ';
    }
}

Option 2:
Do the same as with toUpper, simply calling your own function instead.

【讨论】:

  • 哦,谢谢,我认为这行得通,但是如果我不添加字符而是想更改字符数组的内容而不是“打印出来”我想更改“打印出来”的文字,我该怎么办?
  • 只要不超出数组的大小,就不需要分配新数组,可以使用直接数组访问,例如:x[3] = 'c' 或您可以使用指针算术 *(x + 3) = 'c' ,它们都具有相同的效果。如果你有一个更一般的目标,也许我可以帮忙?
  • 谢谢,我会提出一个新的问题。
  • 好吧,我还没写出新问题。但是代码几乎是一样的,除了“return (x+'c')”它是“return (c >= 'a' && c
  • 通过上述更改,它仍然会打印两次相同的消息。所以我尝试了这个“strcpy(c,((c >= 'a' && c
猜你喜欢
  • 2018-09-01
  • 2023-03-08
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 2013-09-10
  • 2011-02-06
相关资源
最近更新 更多