C 将字符串作为指针传递给函数
对于许多人来说,这是一个简单的函数,但作为初学者,我还没有克服指针幽灵,特别是在字符串方面。我了解strcmp、strcpy、strlen的一些示例,以及如何使用空终止符在内存中分配字符。我想我也知道内存中的指针变量是如何指向int-var或char等的地址的,你可以通过将它们解引用到var/char来分配它们,但是每当我试图编写代码时,指针幽灵就会回来咬我。 所以,在这里,我试图运行这个,但不起作用。如果你能为我澄清这一点,我将不胜感激C 将字符串作为指针传递给函数,c,string,function,pointers,C,String,Function,Pointers,对于许多人来说,这是一个简单的函数,但作为初学者,我还没有克服指针幽灵,特别是在字符串方面。我了解strcmp、strcpy、strlen的一些示例,以及如何使用空终止符在内存中分配字符。我想我也知道内存中的指针变量是如何指向int-var或char等的地址的,你可以通过将它们解引用到var/char来分配它们,但是每当我试图编写代码时,指针幽灵就会回来咬我。 所以,在这里,我试图运行这个,但不起作用。如果你能为我澄清这一点,我将不胜感激 //GETNAME function should re
//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;
}
//GETNAME函数应返回不为NULL且少于20个字符的字符串
char getname(char*s1)
{
inti,n;
字符s2[i];
printf(“输入您的姓名:”);
scanf(“%s”、“s2”);
if(s2==NULL)
返回0;
否则,如果(n这里有几个错误;可能还有更多错误:
未初始化变量:
int i, n;
char s2[i];
i
在这里没有初始化,但您使用它时就好像它是初始化的一样。i
应该有什么值?像这样,它是未定义的行为
scanf
的参数不正确:
scanf ("%s", "s2");
第二个参数应该是指向要写入输入的内存的指针,而不是常量字符串。它应该是:
scanf ("%s", s2);
char* getname(char *s1)
char* urname;
urname = getname(name);
strlen的参数不正确
:
for ( i=0, n =strlen (s2 + 1); i<n; i++)
getname
的一般问题,包括返回类型:
char getname (char *s1)
为什么这个函数如此复杂?你可以直接scanf
进入参数s1
。你什么都不需要s2
。而且返回类型是错误的。你返回一个指针,而不是一个char
。它应该是:
scanf ("%s", s2);
char* getname(char *s1)
char* urname;
urname = getname(name);
未正确处理来自getname
的返回值:
char urname;
urname = getname(name);
getname
返回指向字符的指针,而不是单个字符。它应该是:
scanf ("%s", s2);
char* getname(char *s1)
char* urname;
urname = getname(name);
正如前一篇文章所说,i
没有初始化
还有那条线
scanf("%s", "s2");
应该是
scanf("%s", s2);
台词
if (s2 == NULL)
return 0;
else if(n<20)
if(s2==NULL)
返回0;
否则,如果(nDefine“不起作用”。我们不知道这应该做什么,也不能强迫我们为您调试代码。看起来您想要scanf(“%s”,s2);
而不是scanf(“%s”,“s2”);
在这里,我试图打印来自主函数的名称输入,只要它不超过20个字符或空。我知道这很混乱,但试图澄清我做错了什么…谢谢你的精彩回复;我正在尝试自己学习,我发现我缺乏一些基本知识…我想我需要学习更多的基本知识,并解决一些问题在写函数之前先学习。真的很感激!谢谢!现在就买一本书。。。