Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符串作为指针传递给函数_C_String_Function_Pointers - Fatal编程技术网

C 将字符串作为指针传递给函数

C 将字符串作为指针传递给函数,c,string,function,pointers,C,String,Function,Pointers,对于许多人来说,这是一个简单的函数,但作为初学者,我还没有克服指针幽灵,特别是在字符串方面。我了解strcmp、strcpy、strlen的一些示例,以及如何使用空终止符在内存中分配字符。我想我也知道内存中的指针变量是如何指向int-var或char等的地址的,你可以通过将它们解引用到var/char来分配它们,但是每当我试图编写代码时,指针幽灵就会回来咬我。 所以,在这里,我试图运行这个,但不起作用。如果你能为我澄清这一点,我将不胜感激 //GETNAME function should re

对于许多人来说,这是一个简单的函数,但作为初学者,我还没有克服指针幽灵,特别是在字符串方面。我了解strcmp、strcpy、strlen的一些示例,以及如何使用空终止符在内存中分配字符。我想我也知道内存中的指针变量是如何指向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;
}
//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个字符或空。我知道这很混乱,但试图澄清我做错了什么…谢谢你的精彩回复;我正在尝试自己学习,我发现我缺乏一些基本知识…我想我需要学习更多的基本知识,并解决一些问题在写函数之前先学习。真的很感激!谢谢!现在就买一本书。。。