C指针解引用

C指针解引用,c,C,有人能给我解释一下上面这句话吗?如果我尝试取消引用指针,为什么程序在给出小于20的有效输入时崩溃?但是,当我没有取消指针的引用时,它没有崩溃。如果我取消引用它,它不应该给我输入的值吗?但是,如果我没有取消引用它,它怎么会给我这个值呢?函数在内存中输入以null结尾的字符串的地址 在代码中,变量ptrName实际上指向内存中以null结尾的字符串 但是通过调用put*ptrName,您将传递该字符串的第一个字符 当传递给函数puts时,该字符的值将扩展为地址的大小(通常为4或8字节),并且函数假定

有人能给我解释一下上面这句话吗?如果我尝试取消引用指针,为什么程序在给出小于20的有效输入时崩溃?但是,当我没有取消指针的引用时,它没有崩溃。如果我取消引用它,它不应该给我输入的值吗?但是,如果我没有取消引用它,它怎么会给我这个值呢?

函数在内存中输入以null结尾的字符串的地址

在代码中,变量ptrName实际上指向内存中以null结尾的字符串

但是通过调用put*ptrName,您将传递该字符串的第一个字符

当传递给函数puts时,该字符的值将扩展为地址的大小(通常为4或8字节),并且函数假定它指向有效的以null结尾的字符串


然后,函数尝试读取该内存地址的内容,这很可能导致非法内存访问,尽管官方认为这是未定义的行为-任何事情都可能发生。

ptrName是指向char的指针*ptrName是char。函数puts将指针作为参数,而不是字符。当您这样使用它时,它将尝试将Char的值解释为指针,这将导致内存冲突。

函数puts需要内存中以null结尾的字符串的地址。我从哪里可以阅读特定的C函数详细信息,比如你写的那一个?@sutoL:Open,在搜索框中键入put,单击enter,等待你被重定向到一个新的网页,其中包含一个web链接列表,选择第一个非商业链接并打开它。如果你写的是putsptrName,它甚至不应该编译…
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <conio.h>

void main(){
    void generateId(char*, char*);

    char name[20];
    char id[7];
    printf("Enter your name: ");
    scanf("%s", name);
    generateId(name, id);

}

void generateId(char *name, char *id){

    char *ptrName = name;
    char *ptrId = id;
    puts(ptrName);//crashes if i used puts(*ptrName);
}