C 你能在函数内部取消引用字符指针吗?
我试图将char指针转移到函数中的char数组:C 你能在函数内部取消引用字符指针吗?,c,pointers,C,Pointers,我试图将char指针转移到函数中的char数组: void getword(char *word) { *word = "bar"; } int main() { char defword[4] = "foo"; getword(defword); printf("%s\n", defword); return 0; } 我希望得到“bar”作为输出,但我似乎得到了完全不相关的字符串“1oo”。取消引用的char*的类型是char——一种基本值类
void getword(char *word)
{
*word = "bar";
}
int main()
{
char defword[4] = "foo";
getword(defword);
printf("%s\n", defword);
return 0;
}
我希望得到“bar”作为输出,但我似乎得到了完全不相关的字符串“1oo”。取消引用的
char*
的类型是char
——一种基本值类型。在这种情况下,*word
与word[0]
相同
“bar”
的类型是const char*
——一种指针类型
将指针的值指定给字符。我怀疑你的编译器会让这种情况发生而不发出强烈的嘎嘎声
无论如何,调查一下。抛开这一切可怕的不安全因素不谈,这将更好地发挥作用:
strcpy(word, "bar");
取消引用的
char*
的类型是char
——一种基本值类型。在这种情况下,*word
与word[0]
相同
“bar”
的类型是const char*
——一种指针类型
将指针的值指定给字符。我怀疑你的编译器会让这种情况发生而不发出强烈的嘎嘎声
无论如何,调查一下。抛开这一切可怕的不安全因素不谈,这将更好地发挥作用:
strcpy(word, "bar");
尝试使用strcpy()而不仅仅是赋值。是否启用了任何编译器警告?
getword()
(char*
分配给char
)中的赋值应该至少有一个。实际上,我从指针得到了一个“不带强制转换的整数[默认启用]”警告,我只是不知道该怎么做,但strcpy肯定能工作,感谢您的帮助!尝试使用strcpy()而不仅仅是赋值。是否启用了任何编译器警告?getword()
(char*
分配给char
)中的赋值应该至少有一个。实际上,我从指针得到了一个“不带强制转换的整数[默认启用]”警告,我只是不知道该怎么做,但strcpy肯定能工作,感谢您的帮助!是什么让strcpy不安全?有更安全的选择吗?但这就完成了,谢谢@qwesr,它盲目地复制到目标缓冲区,直到在源缓冲区中遇到nul,而不考虑目标缓冲区的容量。与软件中的许多东西一样,它并不是天生不安全的。但是,由于其危险的特性,养成知道并尊重目标缓冲区大小的字符串复制函数的习惯要安全得多。在某些情况下,可能是这样,但请注意。这是C的缺点,您需要小心内存分配。究竟是什么使strcpy不安全?有更安全的选择吗?但这就完成了,谢谢@qwesr,它盲目地复制到目标缓冲区,直到在源缓冲区中遇到nul,而不考虑目标缓冲区的容量。与软件中的许多东西一样,它并不是天生不安全的。但是,由于其危险的特性,养成知道并尊重目标缓冲区大小的字符串复制函数的习惯要安全得多。在某些情况下,可能是这样,但请注意,这是C的缺点,您需要小心内存分配。