Почему этот код зависает, когда я пытаюсь использовать функцию записи (man 2 write)? [закрыто]

Правильный синтаксис добавления столбца в таблицу:

ALTER TABLE table_name
  ADD column_name column-definition;

В вашем случае это будет:

ALTER TABLE Employees
  ADD EmployeeID int NOT NULL IDENTITY (1, 1)

Чтобы добавить несколько столбцов, используйте скобки:

ALTER TABLE table_name
  ADD (column_1 column-definition,
       column_2 column-definition,
       ...
       column_n column_definition);

ключевое слово COLUMN в SQL SERVER используется только для изменения:

ALTER TABLE table_name
  ALTER COLUMN column_name column_type;
-3
задан Vladimir 18 January 2019 в 15:12
поделиться

4 ответа

Типичная реализация strlen:

size_t strlen(char *s)
{
    size_t len = 0;
    while(*s++) len++;
    return len;
}

Другими словами, он определяет длину строки, увеличивая указатель на начало строки, пока не будет достигнут нулевой терминатор. Поскольку ваш буфер является просто блоком символа 'h' без нулевого терминатора, вызов strlen для него имеет неопределенное поведение.

Ваш второй пример кода, где вы явно добавляете нулевой терминатор после вызова malloc, а затем используете strcat для многократной записи в строку, не имеет этой проблемы, поскольку строковые литералы автоматически заканчиваются нулем. [119 ]

Кроме того, не приводят к результату malloc , если только вам не нужен ваш код для совместимости с C ++.

0
ответ дан Govind Parmar 18 January 2019 в 15:12
поделиться

(Предполагается, что вы исправили проблему strlen, т.е. write(1, str, 235436))

Вы пишете в канал. Эта труба не читается. Поэтому write будет заблокирован.

Получить что-нибудь почитать из трубы.

0
ответ дан Ed Heal 18 January 2019 в 15:12
поделиться

Я использую трубу на машине Linux. Согласно этому ответу я пытаюсь прочитать больше байтов, чем может содержать pipe. Итак, в этой ситуации мне нужно создать файл с ним работать.

FILE *fptr;
fptr = fopen("buffer", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
    fptr = fopen("buffer", "wb");
}
0
ответ дан Vladimir 18 January 2019 в 15:12
поделиться

Проблема в вызове функции strlen!

strlen(str)

Потому что вы не установили терминатор в конце строки.

Добавление следующего кода после цикла инициализации устранит проблему:

str[235435]='\0';
0
ответ дан HmT 18 January 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: