#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int main(){
char storage[128]="\0";
char buffer[24];
fgets(buffer, 24, stdin);
strcat(storage, buffer);
fgets(buffer, 24, stdin);
strcat(storage, buffer);
printf("%s", storage); // line 12
return 0;
}
Я пытаюсь увидеть, что line 12
печатает "string one\0string two"
, когда я ввожу "string one"
и "string two"
в предыдущих fgets()
строках, но вместо этого печатает "string one\nstring two"
. Насколько я знаю, strcat()
завершает "\0"
в конце первой строки, поэтому этот код должен был дать мне формат, который я хотел, но это не так. Что я делаю не так?
char storage[128]="\0";
--›char storage[128]="";
конец строки будет добавлен компилятором. - person Weather Vane   schedule 26.11.2015"string one\0string two"
после внесения предложенного мной изменения? Обратите внимание, чтоfgets()
сохраняетnewline
в конце, это то, что вы видите? - person Weather Vane   schedule 26.11.2015"string one\0string two"
, но это дает мне"string one\nstring two"
. Итак, после того, как я внес предложенное вами изменение, оно по-прежнему давало мне"string one\nstring two"
. По крайней мере, это то, что я вижу на экране, в основном первая строка напечатана в одной строке, а вторая строка находится в следующей строке, как если бы между ними было"\n"
. - person Deniz   schedule 26.11.2015fgets()
, следующим образом: это безопасно, даже если новой строки нет.buffer [ strcspn(buffer, "\r\n") ] = 0;
Однако вы получите"string onestring two"
, а не"string one\0string two"
. - person Weather Vane   schedule 26.11.2015buffer[strlen(buffer)-1]=0;
, но не уверен, какой из них будет работать лучше. Я попробую оба способа. Дополнение: только что обнаружил, чтоstrlen()
не работает, когда входная строка полностью заполняет буфер. Так что, думаю, я пойду сstrcspn()
. Спасибо. - person Deniz   schedule 26.11.2015