2013-11-26 26 views
0

我有串char * buff,並希望其susbtring工作(從buff + x直到buff + y。 我必須複製此蜇到其他變量?還是僅僅是有沒有更好的辦法去實現它? 現在我希望這個子寫入文件與子工作

+1

這取決於什麼「工作」的手段,並在那裏將afterthat使用。如果您只是閱讀它,則無需複製。 – Deck

+0

我想寫這個子字符串到一個文件。 – MaMu

+0

如果使用'fwrite'編寫足夠好,那麼它是可行的。否則,您可能需要複製(或暫時將'buff [y]'設置爲NUL)。 –

回答

3

沒有,只是做了直接寫,就像你希望:

fwrite(buff + x, y - x + 1, 1, my_file); 

以上的方式呈現閉區間,如果你說的是半開的,你需要刪除+ 1。例如,用const char *buff = "hello, world";以上將寫"world"如果x = 7y = 12

寫入操作將從緩衝區的「切片」完成,因爲這就是對fwrite()所說的全部內容。它不知道它收到的數據當然是更大的一部分。

作爲註釋中的指針,上面將切片視爲二進制數據,如果它真的是一個字符串,那麼它可能是不好的。在那種情況下,爲了能夠使用例如fprintf()%s,你應該使用動態格式字符串(你需要%.Ns其中N爲y - x + 1):

static int substring_print(const char *s, size_t start, size_t end) 
{ 
    char fmt[16]; 

    snprintf(fmt, sizeof fmt, "%%.%us", end - start + 1); 
    fprintf(stdout, fmt, s + start); 
} 
+0

當然,這假設二進制輸出是足夠好的(不需要換行符解釋)。 –