您好,我對 C 編程語言非常陌生,我正在用 C 撰寫我的第一個程式。我想從使用 getline() 讀入的行末尾洗掉“\n”并將其替換為“\0”。我使用 if 陳述句中的代碼進行了嘗試,這是我的 while 回圈中的第一個運算式,但我沒有得到我想要的行為。我嘗試了這里建議的解決方案Function to remove newline 沒有效果?但它對我的情況不起作用,我不明白為什么,我認為我在使用指標時犯了一個錯誤,但我無法弄清楚它是什么。我到底做錯了什么,我該如何解決?
void foo(FILE *input, FILE *output) {
char *line = NULL;
size_t length = 0;
ssize_t chars_read;
while ((chars_read= getline(&line, &length, input)) != -1) {
if (line[chars_read-1] == '\n') {
line[chars_read-1] = '\0';
chars_read = chars_read - 1;
}
char *line_rev = malloc(sizeof(char)*chars_read);
bar(line, line_rev, chars_read);
if (strcmp(line, line_rev) == 0) {
...
} else {
...
}
free(line_rev);
}
free(line);
}
更新:感謝所有有用的答案!對于未來的訪問者:在 WSL 上作業時要小心,新行可能是 '\n' 或 '\r',具體取決于您正在使用的作業系統。有關詳細資訊,請查看 Ted 的回答;)。
uj5u.com熱心網友回復:
您需要做的只是簡單地將 a 放在\0哪里\n。
它可能看起來像這樣;
char *line = NULL;
size_t length = 0;
ssize_t chars_read;
// ...
if(chars_read > 0 && line[chars_read-1] == '\n') {
line[chars_read-1] = '\0';
// special care for windows line endings:
if(chars_read > 1 && line[char_read-2] == '\r') line[chars_read-2] = '\0';
}
uj5u.com熱心網友回復:
要更換一個潛在'\n'的字串有'\0':
line[strcspn(line, "\n")] = '\0';
利用先驗長度chars_read:
if (chars_read > 0 && line[chars_read - 1] == '\n') {
line[--chars_read] = '\0';
}
malloc() 對于OP的需要來說,1太短了。
// char *line_rev = malloc(sizeof(char)*chars_read);
char *line_rev = malloc(sizeof(char)*(chars_read 1));
bar(line, line_rev, chars_read);
if (strcmp(line, line_rev) == 0) {
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360382.html
標籤:C 细绳 指针 io linux的windows子系统
上一篇:將二維陣列作為C 中的方法列印
