我已使用以下代码将HTML文件复制到数组中:

fseek(board, 0, SEEK_END);
long int size = ftell(board);
rewind(board);
char *sourcecode = calloc(size+1, sizeof(char));
fread(sourcecode, 1, size, board);


现在,我的目标是用已经定义的char字符串“ king”替换数组中的某个注释。例如。





国王

我正在使用以下代码:

    find_pointer = strstr(sourcecode, text2find);
    strcpy(find_pointer, king);
    printf("%s", sourcecode);


其中text2find =“ ”;

但是,当我打印时,很明显,我所有超过“国王”的字符都被删除了,就像自动添加了终止字符一样。如何解决此问题,使保持不变?

编辑:::::
我使用了strncpy并设置了许多字符,以便不添加终止字符。这是最好的方法吗?

最佳答案

您基本上无法做到这一点,除非您要替换的东西大小完全相同。在这种情况下,您可以使用memcpystrncpy

如果大小不同,您可以尝试以下方法:

char *buffer = malloc(size); // size should be big enough to store the whole final html code
find_pointer = strstr(sourcecode, text2find);
len = find_pointer - sourcecode;
memcpy (buffer, sourcecode, len);
memcpy (buffer + len, "king", 4);
memcpy (buffer + len + 4, find_pointer + 4, strlen(sourcecode) - len - strlen(text2find));
free(sourcecode);
sourcecode = buffer;

10-04 14:54