字符串操作复制字符串的一部分c编程

时间:2015-12-10 04:07:04

标签: c arrays string copy buffer

如果我在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帐户"。
我试图做的是复制"帐户"从bufferderp,无需复制" OPEN"。
输出将返回:

buffer:  OPEN  
derp:     

如果我更改buffer以保持" OPENaccount"没有空格,输出将返回:

buffer:  OPEN  
derp:  account  

我理解strncpy可能会以不同方式查看空格,但为什么我的第一组结果不会返回任何内容?我也尝试将&buffer[5]更改为&buffer[6],但收到的结果相同。

3 个答案:

答案 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'