为什么这个代码不工作。 只是想检查,如果用户输入相同密码
char *pass;
printf("Write the password: ");
scanf("%s", pass); // Because is a pointer the & is out ?
if( strcmp( pass , "acopio") == 0)
为什么这个代码不工作。 只是想检查,如果用户输入相同密码
char *pass;
printf("Write the password: ");
scanf("%s", pass); // Because is a pointer the & is out ?
if( strcmp( pass , "acopio") == 0)
你没有实际分配任何空间来放置数据。 限定指针只是限定了可容纳的数据的块的地址的变量,它不分配块。
你有几个选项,动态分配内存空间离堆写进去,使指针指向它。 或在堆栈上使用静态分配的内存,它的地址传递给您的来电。 还有一点好处动态内存在这种情况下(因为它在使用临时小)。 你将有更多的工作要做,如果你使用动态内存 - 你必须确保你有你的要求分配它的时候,确保你已经给它回来时,你就大功告成了,并确保你不使用它你给它回来后(在棘手的一大应用,相信我!)这只是更多的工作,而你似乎并不需要额外的努力。
下面的例子也需要显著错误检查,但给你的总体思路。
如
char *pass = malloc (SOMESIZE);
printf("Write the password: ");
scanf("%s", pass);
if( strcmp( pass , "acopio") == 0)
要么
char pass[SOMESIZE];
printf("Write the password: ");
scanf("%s", pass);
if( strcmp( pass , "acopio") == 0)
pass
是一个未初始化的指针,并尝试写进去。 你要分配足够的内存来保存一个字符串。 例如, char pass[SIZE]
将更好地工作。
您需要分配pass
这样的scanf
将存储输入的地方。 否则,你有内存损坏。
是指针未初始化。 如果调试它,你会得到一个access violation or segmentation fault
。 该代码可以如下改变。
char pass[22];//22 can be replaced with other number
printf("Write the password: ");
scanf("%s", pass);
if( strcmp( pass , "acopio") == 0)
printf("fu");//just to check
您还没有初始化pass
指向一个缓冲区或其他位置存储输入。
对于一些简单的这样,你可以声明pass
作为数组char
,而不是一个指针:
char pass[N]; // where N is large enough to hold the password plus a 0 terminator
scanf("%s", pass);
if (strcmp(pass, "acopio") == 0)
{
...
}
除了当它是的操作数sizeof
, _Alignof
,或一元&
运营商,或者是一个字符串被用来初始化一个声明另一个数组,类型“的N元件阵列的表达 T
”将被转换(“衰变“),以类型的表达式‘指针T
’,并且表达式的值是数组的第一元素的地址。
传递时, pass
作为参数传递给scanf
和strcmp
,该表达式的类型pass
从“的N元件阵列转换char
”到“指针char
”,并且表达式的值是第一元素的地址pass
,或&pass[0]
这就是为什么你不需要使用&
运营商在scanf
调用。
类似地,在strcmp
呼叫,字符串文字“acopio”是从类型“的7个元素的数组的表达转换char
”( const char
在C ++),以“指针char
”。
#include<stdio.h>
main()
{
int mystrcmp(char *,char *);
char s1[100],s2[100];
char *p1,*p2;
p1=s1;
p2=s2;
printf("Enter the first string..?\n");
scanf("%s",p1);
printf("Enter the second string..?\n");
scanf("%s",p2);
int x=mystrcmp(p1,p2);
if(x==0)
printf("Strings are same\n");
else
printf("Strings are not same..\n");
}
int mystrcmp(char *p1,char *p2)
{
while(*p1==*p2)
{
if(*p1=='\0' || *p2=='\0')
break;
p1++;
p2++;
}
if(*p1=='\0' &&as *p2=='\0')
return(0);
else
return(1);
}
适合初学者简单的代码....