fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //文字列の長さを求める関数
  5. int myStrlen(char s[]){
  6. int i;
  7. for(i = 0; s[i] != '\0'; i++);
  8. return i;
  9. }
  10.  
  11. //文字列を2回繰り返した文字列を作る関数
  12. char *setDouble(char s[]){
  13. int i, size;
  14. char *tmp;
  15.  
  16. //文字列の長さを求める
  17. size = myStrlen(s);
  18.  
  19. //2倍の文字数+終端文字1文字分のメモリを確保
  20. tmp = (char *)malloc(sizeof(char) * (2 * size + 1));
  21.  
  22. //メモリ確保に失敗した場合
  23. if(tmp == NULL){
  24. printf("ERROR\n");
  25. return NULL;
  26. }
  27.  
  28. //前半に元の文字列をコピー
  29. for(i = 0; i < size; i++){
  30. tmp[i] = s[i];
  31. }
  32.  
  33. //後半にも元の文字列をコピー
  34. for(i = 0; i < size; i++){
  35. tmp[i + size] = s[i];
  36. }
  37.  
  38. //文字列の終わり
  39. tmp[2 * size] = '\0';
  40.  
  41. return tmp;
  42. }
  43.  
  44. int main(){
  45. char s[100];
  46. char *p;
  47.  
  48. //文字列を入力
  49. scanf("%s", s);
  50.  
  51. //2回繰り返した文字列を作る
  52. p = setDouble(s);
  53.  
  54. //表示
  55. printf("%s -> %s\n", s, p);
  56.  
  57. //mallocで確保したメモリを解放
  58. free(p);
  59.  
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 5296KB
stdin
abc
stdout
abc -> abcabc