fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void my_strcat(char **str, char **buf)
  6. {
  7. char *ptr;
  8. int n = strlen(*str) + strlen(*buf);
  9. int len = strlen(*str);
  10. if (len) {
  11. ptr = *str + len - 1;
  12. if (*ptr == '\n') {
  13. *ptr = '\0';
  14. }
  15. }
  16. ptr = (char *) realloc(*str, n + 1); /*strとbuf分の領域確保 */
  17. if (ptr == NULL) {
  18. free(*str);
  19. free(*buf);
  20. exit(1);
  21. }
  22. *str = ptr;
  23. strcat(*str, *buf); /*bufをstrに結合する */
  24. return;
  25. }
  26.  
  27. int main(void)
  28. {
  29. int n = 2;
  30. char *str, *buf;
  31. str = (char *) malloc(30 * sizeof(char));
  32. buf = (char *) malloc(30 * sizeof(char));
  33. for (n = 1;; ++n) {
  34. printf("input string_%d :", n);
  35. fgets(buf, 30, stdin);
  36. if (strcmp(buf, "quit\n") == 0) {
  37. break;
  38. } /*quitと入力されたらループを抜ける */
  39. my_strcat(&str, &buf);
  40. }
  41. printf("str = %s", str);
  42. free(str);
  43. free(buf);
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0s 2428KB
stdin
1
22
333
4444
55555
L16_111122223333
L29_111122223333444455556666@
L30_111122223333444455556666x@
L31_111122223333444455556666xy@
L32_111122223333444455556666xyz@
L36_AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH
end
quit
stdout
input string_1 :input string_2 :input string_3 :input string_4 :input string_5 :input string_6 :input string_7 :input string_8 :input string_9 :input string_10 :input string_11 :input string_12 :input string_13 :input string_14 :input string_15 :input string_16 :input string_17 :input string_18 :str = 122333444455555L16_111122223333L29_111122223333444455556666@L30_111122223333444455556666x@L31_111122223333444455556666xy@L32_111122223333444455556666xyz@L36_AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHend