Если вы просто хотите убрать эти нежелательные символы из первого аргумента, вам не нужно выделять память, просто пройдитесь по вводимой строке посимвольно. И, если вы знаете, что будете работать в среде ASCII (или в любой другой, которая поддерживает смежные a
- z
), вы можете даже заменить вызовы функций более быстрыми версиями, проверяющими диапазоны символов.
Но я не вижу увеличения скорости как достаточного для оправдания непереносимого кода.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char ** argv) {
int i;
char *p;
if (argc > 1) {
for (p = argv[1]; *p != '\0'; p++) {
if (islower(*p) || isdigit(*p) || *p == '_') {
putchar (*p);
}
}
putchar ('\n');
}
return 0;
}