如何在c中使用偏移函数截断字符串?

时间:2015-07-17 11:21:16

标签: c

我想用函数截断一个字符串 我收到错误: 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;
}

3 个答案:

答案 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[]"?