我正在尝试在C语言中使用strncpy将字符串的一部分复制到另一个字符串中。
例如:
c[] = "How the heck do I do this";
然后将
"do this"
复制到另一个字符串中,以使:d[] = "do this"
需要帮助,感激不尽。
只需传递您想要复制的第一个字母的地址:strcpy(dest, &c[13])
。
如果您想在字符串结束之前结束,请使用strncpy
或更好的是memcpy
(不要忘记将复制的字符串以0结尾)。
strncpy
(几乎总是)是错误的选择。在这种特定情况下,它可以工作,但几乎只是偶然的——因为你正在复制字符串的结尾,所以它会像strcpy
一样工作。当然,这导致strcpy
也能工作,但更容易。
如果您想处理更一般的情况,有一个相当令人惊讶(但非常有效)的选择:sprintf
可以完全满足您的要求:
sprintf(d, "%s", c+20);
sprintf
(与strncpy
或strcpy
不同)也适用于最一般的情况——假设你想仅将do I
复制到d
,但希望d
成为一个正确的以NUL结尾的字符串:
sprintf(d, "%*s", 4, c+13);
这里的4
是要复制的部分的长度,c+13
是指向要复制部分开头的指针。
看起来你正在寻找strncpy函数。不要在意C++网站,文档是针对C的。
或者你也可以使用strcpy
函数。
使用memcpy可能更合适,可以只复制字符串的一部分。
实际上,使用strncpy或strcpy会复制整个字符串直到'\0'终止符。
无论如何,明智起见,要假设结果字符串有足够的空间,否则会发生缓冲区溢出,请确保缓冲区有足够的空间。
strncpy
需要一个长度,strncpy(dest, &c[20], 8)
。无论dest是指向足够大的malloced内存区域的char*
还是足够大的char[N]
都没有关系。 - Daniel Fischerd
是什么意思?strcpy(d, &c[20])
将从位置 20 到 0 终止符(包括)的c
数组部分复制到数组d
中。 - Daniel Fischer