int main(int argc, char *argv[]) {
int fd_src = open(argv[1], O_RDWR);
ssize_t size = lseek(fd_src, 0, SEEK_END);
char *buf[size];
char *prefix = strcat(argv[1], "_");
for(int i = 0; i < size-1; i ) {
lseek(fd_src, i, SEEK_SET);
read(fd_src, buf, 1);
char *postfix = &buf[0];
char *filename = strcat(prefix, postfix);
int fd_dest = open(filename, O_RDWR | O_CREAT | O_EXCL, 0644);
write(fd_dest, buf, 1);
close(fd_dest);
}
close(fd_src);
return 0;
}
輸入檔案“filename”只包含字串“abc”
運行程式后,輸出如下所示:
filename_a // 檔案包含 a filename_ab // 檔案包含 b filename_abc // 檔案包含 c
但我希望它看起來像這樣:
filename_a // 檔案包含 a filename_b // 檔案包含 b filename_c // 檔案包含 c
我已經嘗試過這樣宣告后綴:
字符 * 后綴 = &buf[i]
但這也沒有用。有什么建議么?:)
uj5u.com熱心網友回復:
char *prefix = strcat(argv[1], "_");
這是錯誤的,因為您將一個字符附加到保存在 argv[1] 中的字串上,而 argv[1] 不太可能大到足以容納它。這很可能是未定義的行為。
從您的代碼中,我了解到您希望將檔案名附加到檔案內容的第一個字符。
char filename[strlen(argv[1] 3];
/* ... */
sprintf(filename, "%s_%c", argv[1], buf[0]); // you need to change the type of buf
char *buf[size];
它是一個指標陣列而不是字符。它將作為 作業sizeof(char *) is always > sizeof(char),但您需要一個字符陣列。
char buf[size];
uj5u.com熱心網友回復:
我剛剛解決了它......我意識到我已經設定了標志“O_EXCL”。它現在可以正常作業。:-)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530137.html
標籤:C指针字符附加
