strcmp指针不能在C中工​​作

jot*_*ape 6 c pointers strcmp

为什么这段代码不起作用.只是试图检查用户输入是否与密码相同

char *pass;

printf("Write the password: ");
scanf("%s", pass); // Because is a pointer the & is out ?


if( strcmp( pass , "acopio") == 0)
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 10

您实际上没有分配任何空间来放置数据.定义指针只是定义了一个可以保存数据块地址的变量,它不会分配块.

您有几个选项,从堆中分配动态内存以写入并使指针指向它.或者在堆栈上使用静态分配的内存并将其地址传递给您的呼叫.在这种情况下,动态内存几乎没有什么好处(因为它暂时使用而且很小).如果使用动态内存,你还有更多工作要做 - 你必须确保在分配时得到了你所要求的内容,并确保在完成后你已经回复了它并确保你不使用它在你给它回来之后(在一个大应用程序中很棘手,相信我!)这只是更多的工作,你似乎不需要额外的努力.

下面的例子也需要进行重大的错误检查,但是请给出一般的想法.

例如

char *pass = malloc (SOMESIZE);

printf("Write the password: ");
scanf("%s", pass);


if( strcmp( pass , "acopio") == 0)
Run Code Online (Sandbox Code Playgroud)

要么

char pass[SOMESIZE];

printf("Write the password: ");
scanf("%s", pass);


if( strcmp( pass , "acopio") == 0)
Run Code Online (Sandbox Code Playgroud)

  • 你不需要和号用于scanf调用,因为引用没有任何索引的数组*是*地址,即pass ==&pass [0] (3认同)

md5*_*md5 5

pass是一个统一化的指针,并且您尝试写入它。您必须分配足够的内存来保存字符串。例如,char pass[SIZE]效果会更好。