例如,我有以下
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";对于字符串中不需要的部分,只需插入空终止符即可。像strcpy
和strncpy
这样的代码是完全没有必要的。
#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;
}