C指针差分字符Int

C指针差分字符Int,c,pointers,C,Pointers,下面的代码按需要工作 void TstPointer(int *Pointer) { *Pointer = 3; } int main() { int number = 1; int *ptr = &number; TstPointer(ptr); printf("%d\n", number); } 但是当我将类型切换到char时,它就不起作用了 v

下面的代码按需要工作

  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转换]
*指针=“Hell1”

在执行
*Pointer=“Hell1”编译器警告您。您选择忽略可能调用的

通常,要复制到指针,请使用
strcpy()
,但在这种情况下,这会导致问题,因为
指针
指向不允许更改的字符串文本


在尝试写入该内存位置之前,需要确保该内存是可写的。使用内存分配器函数,或者创建一个数组并使指针指向数组的开头。

TstPointer
方法中,当您执行
*pointer=“Hell1”,您正在生成警告

这是因为,如果
指针
是字符指针,那么
*指针
就是字符变量。你给一个char变量分配了一个字符串常量,这是错误的

为了解决这个问题,我认为应该在函数参数中使用双指针作为
main
中(指针的)传递地址

编辑:


您之所以会收到警告,是因为当您将字符串常量分配给变量(通常是字符指针或数组)时,该变量存储字符串常量开头的地址。现在,当左值不是char指针类型,而只是一个char变量时,会发生一些隐式转换,将“address”赋值(fit)为一个普通的char变量,从而发出警告。但是,我们知道
char
无法容纳内存地址,因此在打印时通常会导致SEGFULT

Hello
的引用传递给您的方法(
&Hello
),就像使用int-

int*ptr=&number;

TstPointer(ptr)
'H'
是一个字符(
char
),
“Hell1”
是一个字符串(
char
)请在初级C编程书中学习指针和字符串是如何工作的。这或strcpy(指针,“Hell1”)@skrtbhtngr应为'char**',但参数的类型为'char*'void TstPointer(char**Pointer),在主参数中,
TstPointer(&Hello)使用strcpy()
是不安全的,因为它会覆盖
main()
中的
“Hello”
。@Turtle这就是我要做的。覆盖main()中的变量(
void TstPointer(char**Pointer){*Pointer=“Hello”}int main(){char*Hello=“Hello World”TstPointer(&Hello);printf(“%s\n”,Hello);}
所以这里我是如何根据你们的答案来解决这个问题的!