对于许多人来说这是一个简单的功能,但作为一个初学者,我还没有特别在弦乐时克服指针幽灵。我理解strcmp,strcpy,strlen的一些示例以及如何使用NULL终止符在内存中分配字符。我想我也明白了内存中的指针变量如何指向int var或char等的地址,并通过将它们解引用到var / char来分配它们,但每当我尝试编写代码时,指针鬼来了回来咬我 所以,在这里我试图运行它并且不起作用。如果你能为我澄清一下,我将不胜感激......
//GETNAME function should return a string that is not NULL and less than 20 characters
char getname (char *s1)
{
int i, n;
char s2[i];
printf ("Enter your name:" );
scanf ("%s", "s2");
if (s2 == NULL)
return 0;
else if(n<20)
for ( i=0, n =strlen (s2 + 1); i<n; i++)
*(s1+i) = s2[i]; //copy characters from s2 and point to chars of s1
return *s1;
}
int main (int argc, char *argv[])
{
char name[20];
char urname;
urname = getname(name);
printf (" Your name is : %s\n", urname);
getch();
return NULL;
}
答案 0 :(得分:3)
以下是几个错误;可能还有更多:
未初始化的变量:
int i, n;
char s2[i];
i
未在此初始化,但您可以像使用它一样使用它。 i
应该有什么价值?像这样,它是未定义的行为。
scanf
的参数不正确:
scanf ("%s", "s2");
第二个参数应该是指向要将输入写入的内存的指针,而不是常量字符串。它应该是:
scanf ("%s", s2);
strlen
的参数不正确:
for ( i=0, n =strlen (s2 + 1); i<n; i++)
你想将1
添加到字符串长度而不是字符串本身,所以它应该是
for ( i=0, n = strlen(s2) + 1; i<n; i++)
getname
的常见问题,包括返回类型:
char getname (char *s1)
为什么这个功能如此复杂?您可以直接scanf
加入参数s1
。任何事情你都不需要s2
。返回类型也是错误的。你返回一个指针,而不是一个char
。它应该是:
char* getname(char *s1)
未正确处理getname
的返回值:
char urname;
urname = getname(name);
getname
返回指向char的指针,而不是单个char。它应该是:
char* urname;
urname = getname(name);
答案 1 :(得分:0)
正如之前的帖子所说,i
未初始化。
也是行
scanf("%s", "s2");
应该是
scanf("%s", s2);
行
if (s2 == NULL)
return 0;
else if(n<20)
不正确,因为s2
不会为NULL且n
未初始化
......那是初学者
我建议你买一本书并阅读它