如果我在C中填充了char buffer[256]
,并且我想将buffer[5]
中的所有字符复制到buffer[25]
到char derp[20]
,并且derp是以null结尾的,我该怎么办?
编辑(1):数学char derp[21]
编辑(2):数学! char derp[22]
为了澄清一些事情,这里是我的一些代码和我遇到的问题:
char buffer[256];
char derp[20];
...
strncpy(derp, &buffer[5], 20); //copy into derp
printf("buffer: %s\n", buffer); //print what I had
printf("derp: %s\n", derp); //print what I got
buffer
会保留一些字符串,例如" OPEN帐户"。
我试图做的是复制"帐户"从buffer
到derp
,无需复制" OPEN"。
输出将返回:
buffer: OPEN
derp:
如果我更改buffer
以保持" OPENaccount"没有空格,输出将返回:
buffer: OPEN
derp: account
我理解strncpy
可能会以不同方式查看空格,但为什么我的第一组结果不会返回任何内容?我也尝试将&buffer[5]
更改为&buffer[6]
,但收到的结果相同。
答案 0 :(得分:0)
使用strncpy
。
char *p = &buffer[5];
char derp[22];
strncpy(derp, p, 21); // Copy 21 characters from buffer[5] to buffer[25]
derp[21] = '\0';
答案 1 :(得分:0)
// buffer [5]缓冲[25]到char derp [20]
好吧,记住要复制的字符数实际上是21个字符,仍然需要NUL终结符的空间......
char buffer[30]; // 30 is arbitrary, must be greater than 26
char derp[22];
int j = 0;
for( int i = 5; i < 25; i++, j++ )
{
derp[j] = buffer[i];
}
derp[i] = '\0';
或更好:
char buffer[30]; // 30 is arbitrary, must be greater than 26
char derp[22] = {'\0'};
int j = 0;
for( int i = 5; i < 25; i++, j++ )
{
derp[j] = buffer[i];
}
答案 2 :(得分:0)
我理解
strncpy
可能会以不同的方式查看空格......
strncpy
在任何情况下都不会以不同的方式查看空格。很可能BLUEPIXY是对的,谁写道:
buffer: OPEN
:可能是buffer[5]
'\0'
。