这段代码有什么问题..关于strncat

Ani*_*mar 1 c c++ visual-c++

抱歉,我现在修改了代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>        

void main()
{
    int i=0;
    char** f=NULL;
    char* ff=NULL;

    ff="abcd";

    f=( char**)malloc ((i + 1) * sizeof (char *)+5);
    f[0]=ff;
 // strcpy(f[0],ff); (this again giving same error)
    strncat(f[0],"efg",3);
    printf("f : %s",f[0]);
}
Run Code Online (Sandbox Code Playgroud)

我收到一些未处理的异常,Access违规写入错误.任何人都可以解释我在这里做的错误.注意:抱歉,我现在修改了代码:

谢谢你的回答

ami*_*mit 5

你将f <-ff
ff指向一个常量char []("abcd")的开头,然后你改变*f的值(这正是*ff)因此 - 访问冲突.

  • 这是个问题,因为他不了解C中字符串的基本内存管理. (3认同)

Die*_*lla 5

第二个赋值f实际上删除了第一个赋值.要复制原始字符串,您必须使用strcpy.另外,请注意在malloc中保留足够的空间.它必须是最初的四个字符"abcd"加上另外三个"efg"加上一个(结尾\0):

f = (char*)malloc(9); // 5+3+1
strcpy(f, ff);
strncat(f, "efg", 3);
Run Code Online (Sandbox Code Playgroud)