内存故障(CoreDump) - 在sprintf

时间:2015-12-29 05:02:17

标签: c memory coredump

我使用strstr函数在String 2中查找String 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)

请帮助我吗?

1 个答案:

答案 0 :(得分:1)

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

   int main ()

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

      return 0;
    }

同样,在你的程序strstr (s1, "Where")中返回NULL,这个值将传递给sprintf。