fork download
  1. /* ヘッダ */
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. /* 課題 */
  6. void insert_str(const char *name, int row, int column, const char *str);
  7.  
  8. /* main() */
  9. int main(void){
  10. insert_str("data.txt", 4, 7, "test");
  11.  
  12. return 0;
  13. }
  14.  
  15. /* 課題 */
  16. void insert_str(const char *name, int row, int column, const char *str){
  17. /* 変数 */
  18. char *front;
  19. char *back;
  20. FILE *file_ptr;
  21. int count = 1;
  22. unsigned long int front_length, back_length;
  23.  
  24. /* エラー */
  25. file_ptr = fopen(name, "r");
  26. if(file_ptr == NULL){
  27. exit(1);
  28. }
  29. /* 指定行まで移動 */
  30. while(count < row){
  31. if(fgetc(file_ptr) == '\n'){
  32. ++count;
  33. }
  34. }
  35. /* 指定列まで移動 */
  36. for(count = 0; count < column; ++count){
  37. fgetc(file_ptr);
  38. }
  39. /* 文字列の長さを保存 */
  40. front_length = ftell(file_ptr);
  41. fseek(file_ptr, 0, SEEK_END);
  42. back_length = ftell(file_ptr) - front_length;
  43. /* 文字列を保存 */
  44. front = (char *)malloc(sizeof(char) * (front_length + 1));
  45. back = (char *)malloc(sizeof(char) * (back_length + 1));
  46. fseek(file_ptr, 0, SEEK_SET);
  47. fread(front, sizeof(char), front_length, file_ptr);
  48. fread(back, sizeof(char), back_length, file_ptr);
  49. front[front_length] = '\0';
  50. back[back_length] = '\0';
  51.  
  52. fclose(file_ptr);
  53. /* 書き込み */
  54. file_ptr = fopen(name, "w");
  55. if(file_ptr == NULL){
  56. exit(1);
  57. }
  58. fprintf(file_ptr, "%s%s%s", front, str, back);
  59. fclose(file_ptr);
  60.  
  61. free(front);
  62. free(back);
  63. }
Runtime error #stdin #stdout 0s 2376KB
stdin
Standard input is empty
stdout
Standard output is empty