char指针被分配到另一个位置并使用strcpy()的问题?

时间:2015-11-11 08:56:09

标签: c arrays string pointers

我试图替换“#34;你好吗?"在字符串数组中' by" woo"。但它在运行时突然退出。请帮忙

char *s[] = {"hi there","how are you","Fine Ok!"};
char str1[4] = "how" ;char str2[4] = "woo";
char *j = NULL; //(char *)malloc(100*sizeof(char));
int i,k; char n[100] = "hi";
//printf("%d",strlen(s));
for(i = 0;i<3;i++ )
{
    j = strstr(s[i],str1);
    if(j==0)
    continue;
    else
    {
        printf("j is %s",j);
        printf("j is %s",j+10);
        strcpy(j,str2);

        printf("j is %s",j);
        break;
    }
}
printf("%s",s[1]);
return 0;

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个问题。让我们从一个更明显的开始:记住strcpy添加字符串终止符。您可能希望使用memcpy代替:

memcpy(j, str2, strlen(str2));

要继续,您需要分配内存并将其分配给j,然后在循环中重新分配j,使j指向其他位置,然后您松开您分配的原始内存导致内存泄漏。另外,in C you should not cast the result of malloc

最后,以及崩溃的可能原因:您尝试修改字符串文字,并且所有字符串文字都是只读