zmiana typu i argument do pliku

0

gdy kompiluje kod

int main(int argc, char *argv[]){

  if(argc < 2){
    printf("Nie podano argumentow\n");
    exit(-1);
  }

  FILE *fp;
  fp = fopen(argv[1], "w");
  if(!fp){
    fprintf(stderr, "Nie moge otworzyc pliku %s", argv[1]);
    exit(-1);
  }
  int c;
  const char *tekst("tekst");
  while( (c=getc(tekst)) !=EOF){
      fputc(c, fp);
      exit(-1);
    }
  fclose(fp);
  return 0;
}

mam error

a4.c: In function ‘int main(int, char**)’:
a4.c:20:13: error: cannot convert ‘const char*’ to ‘_IO_FILE*’ for argument ‘1’ to ‘int _IO_getc(_IO_FILE*)’
   while( (c=getc(tekst)) !=EOF){
             ^
0

Co to według Ciebie ma być?

const char *tekst("tekst");
  while( (c=getc(tekst)) !=EOF){

Kompilator krzyczy jasno

error: cannot convert ‘const char*’ to ‘_IO_FILE*’ for argument ‘1’ to ‘int _IO_getc(_IO_FILE*)’
   while( (c=getc(tekst)) !=EOF){
0

no to co mam zrobic w takim wypadku ?

0

Funkcja oczekuje uchwytu na plik, a ty pchasz do niej jakiś tekst. Co ma zrobić funkcja w takim wypadku?

0

Okej
mam poprawiony kod:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char *argv[]){

  if(argc < 2){
    printf("Nie podano argumentow\n");
    exit(-1);
  }

  FILE *fp;
  fp = fopen(argv[1], "w");
  if(!fp){
    fprintf(stderr, "Nie moge otworzyc pliku %s", argv[1]);
    exit(-1);
  }
  char tekst[] = "tekst";
  fprintf(fp, "%s", tekst);
  fclose(fp);
  return 0;
}

Chce tylko jeszcze zapytac - char tekst[] - jesli zostawia sie puste
nawiasy kwadratowe to ile miejsc ma tablica wtedy ? zmiesci ile sie
wpisze czy jak to dziala?

0
char tekst[] = "tekst";

Utworzy sześcioelementową tablicę o elementach t, e, k, s, t oraz \0.

0

Ma tyle miejsc, ile zajmują dane po znaku = czyli w tym wypadku 6.

0

Czyli jesli nie zdefiniujemy ile miejsc ma tablica to mozemy cos do niej wpisac i potem dopisywac i dopisywac ile chcemy tak ?

0

Nie nie możemy dopisać ile chcemy.

0

to znaczy ile chcemy ale w granicach maxymalnego rozmiaru typu tablicy ?

0

Ta tablica przykładowa ma 6 znaków i w ramach tylko tych 6 znaków możesz cos podmieniać.

0

a jesli np stworze tablice char tablica[] to moge potem np tablica[] = "tekst" </code> a potem jeszcze <code> tablica[] = "dopisany_tekst"; ? Czy w momencie wpisania tam "tekst" ona juz sie tak okreslila i juz nie da sie dopisac wiecej niz 5 znakow ?

1

Mam propozycję!
Odpal kurs

0

nie wszystko w kursie jest, ale w sumie to o co pytam moglem sprawdzic samemu, dobra spoko ;)

0

To czego nie ma w kursie jest w dokumentacji.

0

https://pl.wikibooks.org/wiki/C <- a gdzie znalezc dokumentacje tego ?

0

Wiec nie ma zadnej polskiej dokumentacji ?

1

nie

Jezeli chcesz byc programista to od tego momentu Twoim ojczystym jezykiem jest angielski.
Masz z nim problemy? rzuc programowanie, ucz sie angielskiego.

0

Dobrze, nie wiedzialem to zapytalem.Jak nie ma to nie ma, trzeba bedzie po angielsku, spoko dziekuje za odpowiedzi ;)

0

Kup jakieś książki i się z nich zacznij uczyć. Do tego praktykuj - rób ćwiczenia. Co jak co ale jest naprawdę sporo ciekawych książek o programowaniu w C/C++. Jak jesteś humanistą ( masz pecha ) to kupujesz Symfonię C++ jak ścisłowcem to "Język C++ Szkoła Programowania" Praty ( wersja C++ 11 ). A najlepiej kupić obie :)

Co do tej tablicy z którą masz problem to sprawa jest jasna jak już zadeklarowałeś tablicę statyczną o odpowiednim rozmiarze to jej rozmiar jest stały.
Poniżej masz zainicjowaną tablicę i robi się to raz, później możesz sobie na takiej tablicy operować ale nie w stylu tablica[] = "nowa wartosc" :)
char tablica[5] = "dupa";
lub
char tablica[] = "dupa";

W drugim przypadku kompilator sam sobie wyliczy ilość znaków.

Jak chcesz zastąpić tekst w tablicy to proszę bardzo:

strcpy(tablica, "kupa");

A jak chcesz nieco bardziej pobawić się tablicami to polecam zapoznać się z funkcjami: strcpy()i strcat() na dobry początek :)
Oczywiście możesz w pętli kopiować znak po znaku, to już możesz sobie zrobić w ramach ćwiczenia :)

Nieznajomość angielskiego wybitnie utrudnia proces kodowania :) No cóż na pewno szybciej nauczysz się podstaw C++ niż samego angielskiego :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1