1

所以,这里是函数:

int strinsert(char *dst, int len, const char *src, int offset)

我需要将我src的字符串的副本插入dst从 position调用的字符串中offset。该参数len指定为数组保留的字符数dst

代码的重要部分:

int strinsert(char *dst, int len, const char *src, int offset)
{
    strncpy(dst, src+offset, len);
    char buf[100];
    strcpy(buf+len, src);
    len += strlen(src) ;
    strcpy(buf+len, dst+offset); 
    strcpy(dst, buf);
    
    return 1;
}

感觉还是有点不对...

编辑:在有人误解之前,我只是在自学如何用 C 编程,我发现了这个练习。顺便说一句,我并没有真正为一维和二维数组找到一些好的学习材料,有人可以这么好心并发布一些吗?

4

4 回答 4

0

这能解决问题吗?

int strinsert(char *dst, int len, const char *src, int offset) 
{
    char temp [MAX_SIZE];

    strncpy(temp, dest+offset, strlen(dest+offset));
    strncpy(dest+offset, src, strlen(src));
    strcat (dest+offset+strlen(src), temp);
    
    return 0;
    
}

显然,上面的代码没有任何错误检查,并且可以对 temp 进行 malloc 等。

于 2013-11-12T07:22:22.527 回答
0

您可以使用strncpy(),这是string.h库的功能。num它将字符串的第一个字符复制sourcedestination字符串。

char * strncpy ( char * 目标, const char * 源, size_t num );

但是在您的情况下,您需要第三个字符串,因为您无法扩展目标数组。您可以将目标数组的子字符串(从开始到偏移)复制到第三个数组中,然后将其余部分连接起来。所以你需要做这样的事情:

char *dst = "ThisIsMyHomework";
char *src = "Not";
char finalString[50];
int offset = 6; //Assume we want to insert "Not" string between "ThisIs" and "MyHomework". So we want src array to start from 6th index of dst array.

strncpy(finalString, dst, offset); //finalString="ThisIs"
finalString[offset] = '\0'; //For finalString, you have to add "\0" manually because strcat will append other strings from 50. index of array if you don't
strcat(finalString, src); //finalString="ThisIsNot"
strcat(finalString, dst + offset); //finalString="ThisIsNotMyHomework"
于 2013-11-12T07:38:45.660 回答
0

它有点痛苦,但你真的必须构造一个新字符串,因为你不能这么容易地真正洗牌内存位,而且我不认为有一个库函数可以做到这一点(有吗??)。像这样的东西:

int strinsert(char *dst, int len, const char *src, int offset)
{
    char *new_string = new char[len];
    int remaining = len;

    // Check offset is not to long (+1 for null)
    if (offset >= remaining)
        offset = remaining;

    // copy the pre-string from dest
    strncpy(new_string, dest, offset);
    // Calulate the remaining space
    remaining -= offset;

    // Add the insert string (with max chars remaining)
    strncat(new_string, src, remaining);
    // calc remaining space
    remaining -= strlen(src);

    // Add the post-string from dest (with max chars remaining)
    strncat(new_string, dest, remaining);

    // Finally copy the new_string into dest
    strncpy(dest, new_string, len);

    // free the memory
    delete [] new_string;
}

注意:您可能需要更好地计算剩余空间,以防它变为负数......

编辑:用内存分配替换可变长度数组(非法...哎呀)

于 2013-11-12T07:41:55.130 回答
0
void strinsert(char *dst, size_t len, const char *src, size_t offset) 
{
  size_t iLenDst = strlen(dst),
         iLenSrc = strlen(src);

  // Some error handling
  if (iLenDst+iLenSrc+1>len)  
  {
    ASSERT(FALSE):
    return;
  }

  // restrict to max length
  if (offset>iLenDst)
    offset = iLenDst;

  // Make room incl. trailing \0
  memmove(dst+offset+iLenSrc,dst+offset,iLenDst-offset+1);
  // Insert new
  memcopy(dst+offset,src,iLenSrc);
}
于 2013-11-12T07:58:05.250 回答