#include #include #include #include void clean_data(char *input) { for (int i = 0; i < strlen(input); i ++) { if (! isalpha(input[i])) input[i] = '-'; } } char *clean_data_2(char *input) { char *result = strdup(input); for (int i = 0; i < strlen(result); i ++) { if (! isalpha(result[i])) result[i] = '-'; } return result; } int is_data_trusted(char *input) { if (strcmp(input, "test")) { return 1; } return 0; } void cmdi(char *input) { char buffer[256] = { 0 }; snprintf(buffer, sizeof(buffer) - 1, "cat %s", input); system(buffer); } void no_cmdi_1(char *input) { clean_data(input); char buffer[256] = { 0 }; snprintf(buffer, sizeof(buffer) - 1, "cat %s", input); system(buffer); } void no_cmdi_2(char *input) { char *tmp = clean_data_2(input); char buffer[256] = { 0 }; snprintf(buffer, sizeof(buffer) - 1, "cat %s", tmp); system(buffer); } void no_cmdi_3(char *input) { if (! is_data_trusted(input)) { return; } char buffer[256] = { 0 }; snprintf(buffer, sizeof(buffer) - 1, "cat %s", input); system(buffer); } void array_test(int index) { const char *data = "123"; printf("it's %c\n", data[index]); } struct ref_data { int count; }; void ref_add(struct ref_data *data) { data->count ++; } void ref_del(struct ref_data *data) { data->count --; } void ref_test() { struct ref_data p1, p2; ref_add(&p1); ref_add(&p2); ref_del(&p2); } int main(int argc, char **argv) { if (argc != 2) { return 1; } cmdi(argv[1]); no_cmdi_1(argv[1]); no_cmdi_2(argv[1]); no_cmdi_3(argv[1]); array_test(argc); ref_test(); return 0; }