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

如何在c中使用偏移量函数截断字符串?,c,C,我想用函数截断字符串。 我得到错误:main.c:7:error:levalue预期值 我做错了什么 char *stringtest; int main() { &stringtest=strtrunk("hello world!", 3); printf("%s", &stringtest); return 0; } char *strtrunk(char *string, int offset) { int stringlen = s

我想用函数截断字符串。
我得到错误:main.c:7:error:levalue预期值

我做错了什么

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;
}

函数
strtrunk
返回一个
char*
并且
stringtest
已经是
char*
类型。所以使用

stringtest=strtrunk("hello world!", 3);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);
%s
需要一个
char*
作为其参数,并且由于
stringtest
已经是一个
char*
,请使用

printf("%s", stringtest);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);

出现错误“预期的左值”是因为
&stringtest
不是有效的


哦,正如其他答案中提到的,修改字符串文字会调用未定义的行为


在包含标题之后,您需要添加一个函数原型:

char* strtrunk(char*, int);

或者只需将
strtrunk
的定义移到
main
的定义之前,您的函数
strtrunk
返回一个
char*
,并且
stringtest
已经是
char*
类型。所以使用

stringtest=strtrunk("hello world!", 3);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);
%s
需要一个
char*
作为其参数,并且由于
stringtest
已经是一个
char*
,请使用

printf("%s", stringtest);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);

出现错误“预期的左值”是因为
&stringtest
不是有效的


哦,正如其他答案中提到的,修改字符串文字会调用未定义的行为


在包含标题之后,您需要添加一个函数原型:

char* strtrunk(char*, int);

或者只需将
strtrunk
的定义移到
main
的定义之前,您的函数
strtrunk
返回一个
char*
,并且
stringtest
已经是
char*
类型。所以使用

stringtest=strtrunk("hello world!", 3);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);
%s
需要一个
char*
作为其参数,并且由于
stringtest
已经是一个
char*
,请使用

printf("%s", stringtest);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);

出现错误“预期的左值”是因为
&stringtest
不是有效的


哦,正如其他答案中提到的,修改字符串文字会调用未定义的行为


在包含标题之后,您需要添加一个函数原型:

char* strtrunk(char*, int);

或者只需将
strtrunk
的定义移到
main
的定义之前,您的函数
strtrunk
返回一个
char*
,并且
stringtest
已经是
char*
类型。所以使用

stringtest=strtrunk("hello world!", 3);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);
%s
需要一个
char*
作为其参数,并且由于
stringtest
已经是一个
char*
,请使用

printf("%s", stringtest);
而不是

&stringtest=strtrunk("hello world!", 3);
printf("%s", &stringtest);

出现错误“预期的左值”是因为
&stringtest
不是有效的


哦,正如其他答案中提到的,修改字符串文字会调用未定义的行为


在包含标题之后,您需要添加一个函数原型:

char* strtrunk(char*, int);

或者只需将
strtrunk
的定义移到
main

的定义之前,按照CoolGuy的建议进行更改。然而,这还不够

不能修改字符串文字。即使您的程序会编译,它也会崩溃,因为修改字符串文字是非法的。 使用我在下面展示的东西:

char p[20] = "hello world!"
strtrunk (p, 3);

按照Coolgay的建议进行更改。然而,这还不够

不能修改字符串文字。即使您的程序会编译,它也会崩溃,因为修改字符串文字是非法的。 使用我在下面展示的东西:

char p[20] = "hello world!"
strtrunk (p, 3);

按照Coolgay的建议进行更改。然而,这还不够

不能修改字符串文字。即使您的程序会编译,它也会崩溃,因为修改字符串文字是非法的。 使用我在下面展示的东西:

char p[20] = "hello world!"
strtrunk (p, 3);

按照Coolgay的建议进行更改。然而,这还不够

不能修改字符串文字。即使您的程序会编译,它也会崩溃,因为修改字符串文字是非法的。 使用我在下面展示的东西:

char p[20] = "hello world!"
strtrunk (p, 3);

您可以使用下面的代码

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;
}

请阅读此链接,该链接详细解释了您的问题

您可以使用以下代码

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;
}

请阅读此链接,该链接详细解释了您的问题

您可以使用以下代码

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;
}

请阅读此链接,该链接详细解释了您的问题

您可以使用以下代码

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;
}

请阅读此链接,该链接详细解释了您的问题

修改字符串文字是未定义的行为()。修改字符串文字是未定义的行为()。修改字符串文字是未定义的行为()。修改字符串文字是未定义的行为()现在错误是:main.c:14:error:strtrink@SimoneGreco更新答案的重新定义不兼容类型。简单地说,在
main
之前移动
char*strtrunk(char*string,int offset){…}
或添加
char*strtrunk(char*,int)就在
#include
snow之后,错误是:main.c:14:错误:用于重新定义'strtrink'@SimoneGreco更新答案的不兼容类型。简单地说,在
main
之前移动
char*strtrunk(char*string,int offset){…}
或添加
char*strtrunk(char*,int)就在
#include
snow之后,错误是:main.c:14:错误:用于重新定义'strtrink'@SimoneGreco更新答案的不兼容类型。简单地说,在
main
之前移动
char*strtrunk(char*string,int offset){…}
或添加
char*strtrunk(char*,int)就在
#include
snow之后,错误是:main.c:14:错误:用于重新定义'strtrink'@SimoneGreco更新答案的不兼容类型。简单地说,在
main
之前移动
char*strtrunk(char*string,int offset){…}
或添加
char*strtrunk(char*,int)紧跟在
#include