【问题标题】:Can you dereference a char pointer inside of a function?您可以取消引用函数内部的 char 指针吗?
【发布时间】:2014-08-06 15:38:45
【问题描述】:

我正在尝试将 char 指针推迟到函数内的 char 数组:

void getword(char *word)
{
    *word = "bar";
}


int main()
{
    char defword[4] = "foo";
    getword(defword);

    printf("%s\n", defword);

    return 0;
}

我希望得到“bar”作为输出,但我似乎得到了完全不相关的字符串 '1oo'。

【问题讨论】:

  • 尝试使用 strcpy() 而不仅仅是一个赋值。
  • 您是否启用了任何编译器警告? getword() 中的分配(char * 分配给 char)应该至少触发一个。
  • 我实际上得到了一个“没有强制转换的指针的整数 [默认启用]”警告我只是不知道该怎么做,但是 strcpy 肯定可以工作,感谢您的帮助!

标签: c pointers


【解决方案1】:

取消引用的char * 的类型是char — 原始值类型。在这种情况下,*wordword[0] 相同。

"bar" 的类型是 const char * — 一个指针类型。

您正在将指针的值分配给字符。我怀疑您的编译器是否会让这种情况发生而不会大声尖叫。

无论如何,请查看strcpy。撇开这一切可怕的不安全不谈,这会更好:

strcpy(word, "bar");

【讨论】:

  • 究竟是什么让 strcpy 不安全?有没有更安全的选择?但这可以完成工作,谢谢!
  • @qwesr,它盲目地复制到目标缓冲区,直到在源缓冲区中遇到 nul,而不考虑目标缓冲区的容量。与软件中的许多东西一样,它本质上并不安全,如果你正确使用它就不会。但是由于它的危险特性,养成一个知道并尊重目标缓冲区大小的字符串复制函数的习惯要安全得多。在某些情况下,这可能是strncpy,但请参阅here 以获取警告。
  • 那是 C 的坏处,你需要小心你的内存分配。
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多