我编写了一个用制表符替换空格的函数。但是当我尝试使用函数实现它时。我完全不了解如何调用此函数。我需要功能
我获得了第二个:
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个功能吗?
答案 0 :(得分:4)
阅读用户输入
要阅读用户的输入,您可以使用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
打印变量
您的SecondFunction
几乎是正确的。要printf
一个C字符串,您需要使用类似于scanf
变量的语法:
printf("%s", string);
同样,你可以像这样打印int i
:
printf("The number is: %d", i);
复制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
中的参数,则会出现未定义的行为,可能是分段错误。