代码bellow工作,因为它需要工作。
void TstPointer(int *Pointer)
{
*Pointer = 3;
}
int main()
{
int number = 1;
int *ptr = &number;
TstPointer(ptr);
printf("%d\n", number);
}
但是当我将类型切换为char时它不起作用。
void TstPointer(char *Pointer)
{
*Pointer = "Hell1";
}
int main()
{
char *Hello = "Hello";
TstPointer(Hello);
printf("%s\n", Hello);
}
警告:赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion] * Pointer =“Hell1”;
答案 0 :(得分:0)
在执行*Pointer = "Hell1";
时,您的编译器会警告您。您选择忽略可能调用undefined behavior的那些。
通常,要复制到指针,请使用strcpy()
,但在这种情况下,这会导致问题,因为Pointer
指向字符串文字 ;不允许改变。
在尝试将写入该内存位置之前,您需要确保内存可写。使用内存分配器函数,或者创建一个数组并使指针指向数组的开头。
答案 1 :(得分:0)
在TstPointer
方法中,当您*Pointer = "Hell1";
时,您正在生成警告。
这是因为,如果Pointer
是char指针,则*Pointer
是char变量。你正在为一个错误的char变量赋一个字符串常量。
要解决这个问题,我认为你应该在函数参数中使用双指针作为传递main
中的地址(指针)!
编辑:
您收到警告是因为当您为变量(通常为char指针或数组)分配字符串常量时,该变量会存储字符串常量开头的地址。现在,当左值不是字符指针类型,但只是一个char变量时,会发生一些隐式转换,将“地址”分配(拟合)到普通的char变量中,而该变量又会发出警告。但是,我们知道char
无法容纳内存地址,因此打印时通常会导致段错误!
答案 2 :(得分:0)
将Hello
的引用传递给您的方法(&Hello
),就像使用int一样 -
int *ptr = &number;
TstPointer(ptr);