2015-12-29 43 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檢查 –