C语言 我想使用strcpy删除字符串的一部分



例如,我有以下

string:"Home=London","Country=England","User=John"

我想查看这些字符串,并使用strcpy只保留'='左侧的内容。

strcpy函数不能这样做。它将对整个字符串进行操作,直到空结束符。但是,strncpy确实接受一个参数,该参数指示要复制多少个字符。

那么我们只需要使用strchr找到指向'='第一次出现的指针,并进行一些指针算术来找到以字符为单位的偏移量。

#include <stdio.h>
#include <string.h>
int main(void) {
char s1[] = "hello=world";
char s2[strlen(s1)+1];

char *equals_sign = strchr(s1, '=');

if (!equals_sign) {
printf("No equals sign found.n");
return 1;
}
size_t offset = equals_sign - s1;
strncpy(s2, s1, offset);
s2[offset] = '';
printf("%sn", s2);

return 0;
}

打印:

hello

注意,这是创建一个新字符串,而不是就地修改现有字符串。因为字符串是以空结束的(在使用标准字符串函数时,空结束符之后的任何内容都不会被考虑),所以我们不需要"erase";对于字符串中不需要的部分,只需插入空终止符即可。像strcpystrncpy这样的代码是完全没有必要的。

#include <stdio.h>
#include <string.h>
int main(void) {
char s1[] = "hello=world";

char *equals_sign = strchr(s1, '=');

if (!equals_sign) {
printf("No equals sign found.n");
return 1;
}
*equals_sign = '';
printf("%sn", s1);

return 0;
}

最新更新