c程序的字符串输入参数 我写了一个用标签字符替换空白空间的函数。但当我尝试使用函数实现它时。我不太明白如何调用这个函数。我需要函数 它将用户的字符串作为输入 用tab字符替换空白空间的第二个函数, 函数打印修改后的字符串

c程序的字符串输入参数 我写了一个用标签字符替换空白空间的函数。但当我尝试使用函数实现它时。我不太明白如何调用这个函数。我需要函数 它将用户的字符串作为输入 用tab字符替换空白空间的第二个函数, 函数打印修改后的字符串,c,C,我实现了第二个目标: void SecondFunction() { char string[]=“我是c新手”; char*p=字符串; 对于(;*p;++p) { 如果(*p=='') *p='\t'; } printf(字符串); } 当我试图调用这个函数时,比如: intmain() { 第二功能(“Hi s”); } 将我的功能更改为: void第二个函数(char*str) { 字符字符串[]=str; char*p=字符串; .... 等 } 我得到以下错误: error:

我实现了第二个目标:

void SecondFunction()
{
char string[]=“我是c新手”;
char*p=字符串;
对于(;*p;++p)
{
如果(*p=='')
*p='\t';
}
printf(字符串);
}
当我试图调用这个函数时,比如:

intmain()
{
第二功能(“Hi s”);
}
将我的功能更改为:

void第二个函数(char*str)
{
字符字符串[]=str;
char*p=字符串;
....
等
}
我得到以下错误:

 error: invalid initializer
   char string[] = str;
   ^
请问,有人能帮我写下我要求的3个函数吗

  • 阅读用户输入

    要从用户处读取输入,可以使用。您需要将要存储输入的变量的内存地址传递给它:

    char userinput[256]; // make it large enough to hold what the user inputs
    scanf("%s", userinput); // array decays to pointer so no '&' here
    
    %s
    表示正在读取字符串输入。我们还可以使用
    %d
    读取
    int
    ,如下所示:

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
  • 打印变量

    您的
    second函数
    几乎正确。要
    printf
    一个C字符串,您需要使用与变量
    scanf
    类似的语法:

    printf("%s", string);
    
    类似地,您可以这样打印
    int i

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
  • 复制C字符串

    当您尝试这样做时:
    charstring[]=str
    ,这是不可能的。无法分配数组,甚至无法复制构造数组

    为了以防万一,当您想要复制C字符串时,您需要使用:

    总之,你的函数可以是这样的:

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
    奖励:为什么不能直接写入
    str
    参数

    编写此命令时:
    SecondFunction(“Hi s”)
    ,字符串
    “Hi s”
    将存储在只读内存段中

    如果随后尝试修改
    SecondFunction
    中的参数,则会出现未定义的行为,可能是分段错误

  • 阅读用户输入

    要从用户处读取输入,可以使用。您需要将要存储输入的变量的内存地址传递给它:

    char userinput[256]; // make it large enough to hold what the user inputs
    scanf("%s", userinput); // array decays to pointer so no '&' here
    
    %s
    表示正在读取字符串输入。我们还可以使用
    %d
    读取
    int
    ,如下所示:

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
  • 打印变量

    您的
    second函数
    几乎正确。要
    printf
    一个C字符串,您需要使用与变量
    scanf
    类似的语法:

    printf("%s", string);
    
    类似地,您可以这样打印
    int i

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
  • 复制C字符串

    当您尝试这样做时:
    charstring[]=str
    ,这是不可能的。无法分配数组,甚至无法复制构造数组

    为了以防万一,当您想要复制C字符串时,您需要使用:

    总之,你的函数可以是这样的:

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
    printf("The number is: %d", i);
    
    void SecondFunction(char* str)
    {
        char string[256];
        strcpy(string, str);
        char *p = string;
        for (; *p; ++p)
        {
            if (*p == ' ')
                *p = '\t';
        }
        printf("%s", string);
    }
    
    奖励:为什么不能直接写入
    str
    参数

    编写此命令时:
    SecondFunction(“Hi s”)
    ,字符串
    “Hi s”
    将存储在只读内存段中

    如果随后尝试修改
    SecondFunction
    中的参数,则会出现未定义的行为,可能是分段错误


  • 无法分配
    字符字符串[]=strchar*string=str但您不需要它。只要做
    char*p=str。这看起来像的副本。我确实喜欢void SecondFunction(char*str){char*p=str;..bla bla..printf(str);}。它给出的错误是“分段错误(内核转储)”@AjayPhilia您使用的是用户输入字符串,而不是字符串文字。而不是
    printf(string)
    您应该执行
    printf(“%s”,string)
    ;如果您的输入值有
    %
    个字符,您的程序将有未定义的行为。您不能分配
    字符字符串[]=strchar*string=str但您不需要它。只要做
    char*p=str。这看起来像的副本。我确实喜欢void SecondFunction(char*str){char*p=str;..bla bla..printf(str);}。它给出的错误是“分段错误(内核转储)”@AjayPhilia您使用的是用户输入字符串,而不是字符串文字。而不是
    printf(string)
    您应该执行
    printf(“%s”,string)
    ;如果您的输入值有
    %
    个字符,您的程序将有未定义的行为。