2015-12-29 45 views
-1

使用功能的strstr我使用的strstr函数查找字符串1在字符串2和使用的sprintf所得分配给一个变量。但是,如果没有找到匹配的字符串,那么在为变量分配一个空指针时会出现'Memory Fault(Core Dump)'错误。可以帮助我错过了内存分配。 (注:?在HP C,但与Solaris GCC编译器编译时相同的代码工作得很好存储器故障(核心转储) - ,而在sprintf的

#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) 

请帮我在这

+2

'的strstr(S1“在哪里“)'返回'NULL'。不应期望printf打印出“NULL”。 – BLUEPIXY

+0

而且要记住,NULL是不一样的长度为零的空结束的字符串...它之所以会在一个平台上工作,而不是另一种是由于与非关联NULL相关的“未定义行为”。 – bazza

+0

你预计在那一行发生了什么? –

回答

1

传递了一个空到的sprintf可能导致成未定义的行为,即使你尝试执行以下程序会崩溃。

int main() 

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

     return 0; 
    } 

同样,在你的程序strstr (s1, "Where")被返回NULL,该值将被传递到sprintf的。

+0

谢谢萨钦,可否告知怎么能得到解决, – Irvan

+0

@Irvan:把它传递给sprintf的前只需进行NULL检查 –