Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存故障(CoreDump)-在sprintf中使用strstr函数时_C_Memory_Coredump - Fatal编程技术网

内存故障(CoreDump)-在sprintf中使用strstr函数时

内存故障(CoreDump)-在sprintf中使用strstr函数时,c,memory,coredump,C,Memory,Coredump,我使用strstr函数在字符串2中查找字符串1,并使用sprintf将结果分配给变量。但是,如果没有找到匹配的字符串,那么在为变量分配空指针时,我会收到“内存故障(核心转储)”错误。可以帮助我在哪里错过了内存分配。(注意:在HP c中编译时,相同的代码运行良好,但在Solaris gcc编译器中则不行 #include <stdio.h> int main() { char s1 [] = "My Car is Green"; char te [300]; sprintf(te,"

我使用strstr函数在字符串2中查找字符串1,并使用sprintf将结果分配给变量。但是,如果没有找到匹配的字符串,那么在为变量分配空指针时,我会收到“内存故障(核心转储)”错误。可以帮助我在哪里错过了内存分配。(注意:在HP c中编译时,相同的代码运行良好,但在Solaris gcc编译器中则不行

#include <stdio.h>

int main() {
char s1 [] = "My Car is Green";
char te [300];
sprintf(te,"%s",strstr (s1, "Car"));
printf("Result : %s\n",te);
te[0]='\0';
sprintf(te,"%s",strstr (s1, "Where"));
printf("Result : %s\n",te);
te[0]='\0';
}


Output:
Result : Car is Green
Memory fault(coredump)
#包括
int main(){
char s1[]=“我的车是绿色的”;
char-te[300];
sprintf(te,“%s”,strstr(s1,Car”);
printf(“结果:%s\n”,te);
te[0]='\0';
sprintf(te,“%s”,strstr(s1,“Where”);
printf(“结果:%s\n”,te);
te[0]='\0';
}
输出:
结果:汽车是绿色的
内存故障(coredump)

请在这方面帮助我?

将NULL传递给sprintf可能会导致未定义的行为,即使您尝试执行下面的程序,它也会崩溃

   int main ()

    {
      char buffer [50];
      int n, a=5, b=3;
     sprintf (buffer, "%s",(char*)NULL);

      return 0;
    }

类似地,在您的程序中,strstrstr(s1,“Where”)返回NULL,该值将被传递给sprintf。

strstr(s1,“Where”)
返回
NULL
。不应被期望为“NULL”由printf打印。请记住,NULL与以零长度NULL结尾的字符串不同…它可能在一个平台上工作而不是在另一个平台上工作的原因是与取消引用NULL相关的“未定义行为”。您希望在这一行发生什么?谢谢各位,有没有办法分配“NULL”使用sprintf或其他函数调用变量。@Irvan最好的方法是不要在对sprintf()的调用中调用strstrstr()。单独调用strstr(),将结果赋给指针。测试指针是否为空,如果不是空,则应调用sprintf()将指针作为第三个参数传递。感谢Sachin,我们可以建议如何处理它。@Irvan:只需在将其传递给sprintf之前执行空检查