2013-06-28 53 views
0

我試圖使用printf函數從傳入函數的指針打印一個字符串。printf期間訪問衝突錯誤

printf("%s\n", strng[1]); 

strng被調用者傳入。這是一個字符串,它前面有一個空格,我想刪除該空格。因此我有下面的代碼。

for(i=0; i<slength -1; i++) { 
    printf("%s\n", strng[1]); 
    tstr[i] = strng[i+1]; 
    printf("%s\n", tstr); 
} 
tstr[slength] = 0; 

它不斷給我一個訪問衝突錯誤,我不明白爲什麼。如果我將printf行取出,那麼我可以運行代碼,但返回字符串tstr在其末尾總是有一個額外的字符。輸出看起來像這樣。

bp185080 
    9 
bªM 
bpM 
bp1 
bp18─ 
bp185 
bp1850K 
bp18508 
bp185080=::=::\ 
bp185080= 

我該如何擺脫白色空間,沒有額外的字符?

+2

你可以顯示'strng'的聲明嗎? –

+0

爲什麼不直接調用strcpy? –

+0

strng是一個輸入參數。所以輸入的例子是「he939379」 – user2127579

回答

4

你基本上試圖使用一個字符作爲指針。將strng[1]替換爲&strng[1]strng + 1

1

你的循環有printf的一些問題;

for(i=0; i<slength -1; i++) { 
    printf("%s\n", strng[1]); // Prints a character with a format of a string, 
           // you may want to use %c here instead to print 
           // the second char, or strng+1 to print the 
           // string starting with the second character. 
    tstr[i] = strng[i+1]; 
    printf("%s\n", tstr);  // Prints tstr before terminated with \0, which 
           // is undefined behaviour, may very well crash. 
} 
tstr[slength] = 0; 

看來還你一個循環迭代太少處理的最後一個字符,你可能會想要做for(i=0; i<slength; i++)

+0

考慮'tstr [i] = 0;'。它處理slength <0的異常情況。 – chux