c程序的字符串输入参数

时间:2015-03-21 14:35:45

标签: c

我编写了一个用制表符替换空格的函数。但是当我尝试使用函数实现它时。我完全不了解如何调用此函数。我需要功能

  1. 以用户的字符串作为输入,
  2. 使用制表符替换空格的第二个函数
  3. 打印修改后的字符串的功能。
  4. 我获得了第二个:

    void SecondFunction()
    {
         char string[] = "I am new to c";
         char *p = string;
    
         for (; *p; ++p)
         {
             if (*p == ' ')
                 *p = '\t';
         }
         printf(string);
    }
    

    当我尝试将此功能称为:

    int main()
    {
         SecondFunction("Hi s"); 
    }
    

    将我的功能更改为:

    void SecondFunction(char* str)
    {
        char string[] = str;
        char *p = string;
        ....
        ...etc
    }
    

    我收到以下错误:

     error: invalid initializer
       char string[] = str;
       ^
    

    拜托,有人可以帮我写出我要求的3个功能吗?

1 个答案:

答案 0 :(得分:4)

  1. 阅读用户输入

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

    char userinput[256]; // make it large enough to hold what the user inputs
    scanf("%s", userinput); // array decays to pointer so no '&' here
    

    %s表示读取字符串输入。我们还可以使用int阅读%d,如下所示:

    int i;
    scanf("%d", &i); // note the address-of operator '&' to get the address of i
    
  2. 打印变量

    您的SecondFunction几乎是正确的。要printf一个C字符串,您需要使用类似于scanf变量的语法:

    printf("%s", string);
    

    同样,你可以像这样打印int i

    printf("The number is: %d", i);
    
  3. 复制C字符串

    当您尝试执行此操作时:char string[] = str,这是不可能的。无法分配数组甚至复制构造。

    为了将来,当你想复制一个C字符串时,你需要使用strcpy

    char string[256]; // again, must be large enough to hold the new contents
    strcpy(string, str); // copies from str to string
    

    总而言之,您的功能可能如下所示:

    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中的参数,则会出现未定义的行为,可能是分段错误。