The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Утверждён стандарт C++17"
Отправлено saahriktu, 08-Сен-17 13:37 
Кто говорил про полное отсутствие проверок? Я говорю о том, что аудитории софта бывают разные, и про это даже учат в ВУЗах. Один из преподавателй того ВУЗа, где я учился, как положительный пример приводил программиста, который для себя писал программы из десятка строк, в которых кроме него никто ничего не понимал. Ну так вот. Не со всяким софтом взаимодействуют сотни и тысячи юзеров. Не всякий софт работает часами без остановки. Есть локальные аудитории юзеров из 3,5 штук. Есть фильтры командной строки. И т.д.

Можно, конечно, писать так
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
        long int a2, al;
        char *buf;
        if (argc < 4) {
                printf("usage: leftpad string width char\n");
                return 1;
        }
        a2 = atol(argv[2]);
        al = a2 - strlen(argv[1]);
        if (al < 1) {
                printf("%s\n", argv[1]);
                return 0;
        }
        buf = (char *)malloc(a2 + 1);
        if (buf == NULL)
                return 1;
        memset(buf, argv[3][0], al);
        buf[al] = '\0';
        printf("%s\n", strcat(buf, argv[1]));
        free(buf);
        return 0;
}

Но, можно и так, исходя из предпосылки, что возникновение любой внештатной ситуации уже само по себе "всё, приехали" (например, откуда внезапно закончится оперативка если на машине её 8 гигов и за пределы сотни-другой мегабайт её использование обычно не выходит?):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *buf;

char *leftpad(char *str, unsigned int len, char ch){
        unsigned int i;
        buf = (char *) malloc ((len + 1 + strlen(str)) * (sizeof(char));
        for(i = 0; i < len; i++) buf[i] = ch;
        return strcat(buf, str);
}

int main(int argc, char **argv){
        if(argc < 4){
                printf("usage: leftpad string length char\n");
                return 1;
        }
        unsigned int al = (unsigned int) atol(argv[2]);
        printf("%s\n", leftpad(argv[1], al, argv[3][0]));
        free(buf);
        return 0;
}

Про более простые случаи вообще молчу.
#include <stdio.h>

char bcharz[] = " !@$^&*|=()[]\\:;\"\'<>,?{}";

int main(){
        char c, bci;
        while((c = getchar()) != EOF){
                for(bci=0; bci < 24 ; bci++) if (bcharz[bci] == c) putchar ('\\');
                putchar(c);
        }
}

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру