我想用函数截断一个字符串 我收到错误: main.c:7:错误:左值预期
我做错了什么?
char *stringtest;
int main()
{
&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);
return 0;
}
char *strtrunk(char *string, int offset)
{
int stringlen = strlen(string);
string[stringlen - offset] = 0;
return string;
}
答案 0 :(得分:3)
您的函数strtrunk
返回char*
,而stringtest
已归入char*
类型。所以使用
stringtest=strtrunk("hello world!", 3);
而不是
&stringtest=strtrunk("hello world!", 3);
%s
期望char*
作为其参数,并且stringtest
已经是char*
,请使用
printf("%s", stringtest);
而不是
printf("%s", &stringtest);
出现错误“ Lvalue expected ”,因为&stringtest
不是有效的lvalue。
哦,正如其他答案中所提到的,修改字符串文字会调用Undefined Behavior。
你需要在包含标题之后添加一个函数原型:
char* strtrunk(char*, int);
或以其他方式简单地在strtrunk
的定义之前移动main
的定义。
答案 1 :(得分:0)
按照CoolGuy的建议进行更改。然而,这还不够。
您无法修改字符串文字。即使你的程序会编译,它也会崩溃,因为修改字符串文字是非法的。 使用我在下面显示的内容:
char p[20] = "hello world!"
strtrunk (p, 3);
答案 2 :(得分:0)
您可以使用以下代码
char *strtrunk(char *string, int offset);
char *stringtest;
char Char_array[]="hello world!";
int main()
{
stringtest=strtrunk(Char_array, 3);
printf("%s", stringtest);
getch();
return 0;
}
char *strtrunk(char *string, int offset)
{
int stringlen = strlen(string);
string[stringlen - offset] = 0x00;
return string;
}
请阅读此链接,详细解释您的问题Why do I get a segmentation fault when writing to a string initialized with "char *s" but not "char s[]"?