我使用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)
请帮助我吗?
答案 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。