#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SRC_LEN 20
#define MAX_DUP_NUM 4
#define TO_TEXT(A) #A
#define BUILD_FORMAT(LEN) "%" TO_TEXT(LEN) "s"
#define INPUT_FORMAT BUILD_FORMAT(MAX_SRC_LEN)
char *copyStr(int n, const char *str);
static inline
void clearStdinBuf()
{
char c;
while((c
= getchar()) != '\n' && c
!= EOF
); }
int main(void) {
char srcStr[MAX_SRC_LEN + 1] = {0}; // +1 for '\0'
char *dupStr;
int n, ret;
printf("using format for scanf: %s\n", INPUT_FORMAT
); printf("enter a string(len<=%d):", MAX_SRC_LEN
); ret
= scanf(INPUT_FORMAT
, srcStr
); if (ret <= 0) {
return 1;
}
// clear extra input
if (strlen(srcStr
) == MAX_SRC_LEN
) clearStdinBuf
();
do {
if (ret <= 0) clearStdinBuf();
if (n > 0 && n <= 4) break;
printf("the n must <= 4, got %d, please enter again:", n
); } while (1);
dupStr = copyStr(n, srcStr);
return 0;
}
char *copyStr(int n, const char *str) {
static char array[MAX_SRC_LEN * MAX_DUP_NUM + 1]; // +1 for '\0'
for (i = 0; i < n; i++) {
for (j = 0; j < len; j++) {
array[len * i + j] = str[j];
}
}
array[len * i] = '\0';
return array;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBNQVhfU1JDX0xFTiAyMAojZGVmaW5lIE1BWF9EVVBfTlVNIDQKCiNkZWZpbmUgVE9fVEVYVChBKSAjQQojZGVmaW5lIEJVSUxEX0ZPUk1BVChMRU4pICIlIiBUT19URVhUKExFTikgInMiCiNkZWZpbmUgSU5QVVRfRk9STUFUIEJVSUxEX0ZPUk1BVChNQVhfU1JDX0xFTikKCmNoYXIgKmNvcHlTdHIoaW50IG4sIGNvbnN0IGNoYXIgKnN0cik7CgpzdGF0aWMgaW5saW5lCnZvaWQgY2xlYXJTdGRpbkJ1ZigpCnsKICAgIGNoYXIgYzsKICAgIHdoaWxlKChjID0gZ2V0Y2hhcigpKSAhPSAnXG4nICYmIGMgIT0gRU9GKTsKfQoKaW50IG1haW4odm9pZCkgewogICAgY2hhciBzcmNTdHJbTUFYX1NSQ19MRU4gKyAxXSA9IHswfTsgLy8gKzEgZm9yICdcMCcKICAgIGNoYXIgKmR1cFN0cjsKICAgIGludCBuLCByZXQ7CgogICAgcHJpbnRmKCJ1c2luZyBmb3JtYXQgZm9yIHNjYW5mOiAlc1xuIiwgSU5QVVRfRk9STUFUKTsKICAgIHByaW50ZigiZW50ZXIgYSBzdHJpbmcobGVuPD0lZCk6IiwgTUFYX1NSQ19MRU4pOwogICAgcmV0ID0gc2NhbmYoSU5QVVRfRk9STUFULCBzcmNTdHIpOwogICAgaWYgKHJldCA8PSAwKSB7CiAgICAgICAgcHJpbnRmKCJlcnJvciBvbiBzY2FuZlxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICAvLyBjbGVhciBleHRyYSBpbnB1dAogICAgaWYgKHN0cmxlbihzcmNTdHIpID09IE1BWF9TUkNfTEVOKSBjbGVhclN0ZGluQnVmKCk7CgogICAgcHJpbnRmKCJuKG48PTQpPSIpOwogICAgZG8gewogICAgICAgIHJldCA9IHNjYW5mKCIlZCIsICZuKTsKICAgICAgICBpZiAocmV0IDw9IDApIGNsZWFyU3RkaW5CdWYoKTsKICAgICAgICBpZiAobiA+IDAgJiYgbiA8PSA0KSBicmVhazsKICAgICAgICBwcmludGYoInRoZSBuIG11c3QgPD0gNCwgZ290ICVkLCBwbGVhc2UgZW50ZXIgYWdhaW46Iiwgbik7CiAgICB9IHdoaWxlICgxKTsKCiAgICBkdXBTdHIgPSBjb3B5U3RyKG4sIHNyY1N0cik7CiAgICBwcmludGYoIiVzXG4iLCBkdXBTdHIpOwoKICAgIHJldHVybiAwOwp9CgpjaGFyICpjb3B5U3RyKGludCBuLCBjb25zdCBjaGFyICpzdHIpIHsKICAgIGludCBpLCBqLCBsZW4gPSBzdHJsZW4oc3RyKTsKICAgIHN0YXRpYyBjaGFyIGFycmF5W01BWF9TUkNfTEVOICogTUFYX0RVUF9OVU0gKyAxXTsgLy8gKzEgZm9yICdcMCcKICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKICAgICAgICAgICAgYXJyYXlbbGVuICogaSArIGpdID0gc3RyW2pdOwogICAgICAgIH0KICAgIH0KICAgIGFycmF5W2xlbiAqIGldID0gJ1wwJzsKICAgIHJldHVybiBhcnJheTsKfQo=