[c] jak funkcja powinna poprawnie zwrocic tablice znakow

kawafis44
Użytkownik
Użytkownik
Posty: 474
Rejestracja: 22 paź 2007, o 20:55
Płeć: Mężczyzna
Lokalizacja: Gliwice
Podziękował: 416 razy
Pomógł: 2 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: kawafis44 »

mam problem z przeniesieniem tablicy char przez funkcję

Kod: Zaznacz cały

#include <stdio.h>
#include <cstdlib>

void Choose_the_filename(char inside_filename[20], int * inside_choosing_filename)
{
      int i;
      char filename[20];
      int choosing_filename;
      filename[0] = 'n'; filename[1] = 'a'; filename[2] = 'z'; filename[3] = 'w'; filename[4] = 'a'; filename[5] = (char)0;
      choosing_filename = 2;

      inside_filename = filename;
      *inside_choosing_filename = choosing_filename;
}

void Func_e() //Save matrices to the file
{
   char filename[20];
   int choosing_filename;
   Choose_the_filename(filename, &choosing_filename);
   printf("Filename: %s\n",filename);
   system("pause");
}

int main(int argc, char *argv[])
{
  Func_e();
  return 0;
}
pozdro!
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: kadiii »

Może napisz co chciałeś osiągnąć w tej funkcji i po co te zmienne pomocnicze...
kawafis44
Użytkownik
Użytkownik
Posty: 474
Rejestracja: 22 paź 2007, o 20:55
Płeć: Mężczyzna
Lokalizacja: Gliwice
Podziękował: 416 razy
Pomógł: 2 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: kawafis44 »

chciałbym żeby mi działała taka funkcja, która umożliwia wybór nazwy pliku

Kod: Zaznacz cały

void Choose_the_filename(char inside_filename[20], int * inside_choosing_filename)
{
      int i;
      char filename[20];
      int choosing_filename;
      printf("\nWrite the name of the file (0 for exit): ");
      do
      {
         choosing_filename=0;
         scanf("%s",&filename); //read the name of the file
         for (i=0;i<20;i++)  //check whether there are any illegal characters
         {
            //these symbols are illegal  \/:*?"<>|  \92 /47 :58 *42 ?63 "34 <60 >62 |124
            if (filename[i]==(char)0) i=22;
            if (i<22) if ((filename[i]==((char)92))||(filename[i]==((char)47))||(filename[i]==((char)58))||(filename[i]==((char)42))||(filename[i]==((char)63))||(filename[i]==((char)34))||(filename[i]==((char)60))||(filename[i]==((char)62))||(filename[i]==((char)124))) choosing_filename=1;
         }
         if (filename[0]=='0') {choosing_filename=2; break;} //check wheter user wants to exit
         if (choosing_filename!=1) break;
         printf("You cannot use symbols (%c%c%c%c%c%c%c%c%c). Choose once more: ",(char)92,(char)47,(char)58,(char)42,(char)63,(char)34,(char)60,(char)62,(char)124);
      }
      while (0==0);

      inside_filename = filename;
      *inside_choosing_filename = choosing_filename;
}
którą wywołuję w ten sposób

Kod: Zaznacz cały

char filename[20];
int choosing_filename; //0 for proper choice, 1 for illegal character, 2 for exit
Choose_the_filename(filename, &choosing_filename);
na przyklad nie potrafi wyswietlic czegos takiego (po dodaniu ostatniej linijki)

Kod: Zaznacz cały

char filename[20];
int choosing_filename; //0 for proper choice, 1 for illegal character, 2 for exit
Choose_the_filename(filename, &choosing_filename);
printf("Taki plik wybrales: %s",filename);
podejrzewam, że błędne są te cztery linijki, ale nie wiem jak je poprawić

Kod: Zaznacz cały

void Choose_the_filename(char inside_filename[20], int * inside_choosing_filename) 
      inside_filename = filename;
      *inside_choosing_filename = choosing_filename; 
Choose_the_filename(filename, &choosing_filename);
podsumowując funkcja, choć zapisuje wybór użytkownika do stringa, to potem nie potrafi przekazać stringa na zewnątrz
pozdrawiam!
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: smiechowiec »

To wygląda na działanie niekoniecznie zgodne z wolą autora.
inside_filename = filename;

Jeśli chcesz przekopiować łańcuch znaków spróbuj
strcpy(inside_filename, filename);
kawafis44
Użytkownik
Użytkownik
Posty: 474
Rejestracja: 22 paź 2007, o 20:55
Płeć: Mężczyzna
Lokalizacja: Gliwice
Podziękował: 416 razy
Pomógł: 2 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: kawafis44 »

DZIĘKI !!!
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[c] jak funkcja powinna poprawnie zwrocic tablice znakow

Post autor: kadiii »

Kod: Zaznacz cały

#include <stdio.h>
#include <string.h>
void pobierz(char *napis,int *blad)
{
 int i;
 int dl=strlen(napis);
 do{
  *blad=0;
  scanf("%s",napis);
  if(napis[0]=='0') *blad=2;
  else{
   for(i=0;i<dl;i++)
    if((napis[i]==((char)92))||(napis[i]==((char)47))||(napis[i]==((char)58))||(napis[i]==((char)42))||(napis[i]==((char)63))||(napis[i]==((char)34))||(napis[i]==((char)60))||(napis[i]==((char)62))||(napis[i]==((char)124)))
     *blad=1;
       }
 }while(*blad);
}

int main(int argc, char *argv[])
{
  char nazwa_pliku[20];
  int blad;
  pobierz(nazwa_pliku,&blad);
  printf("Oto nazwa, ktora wybrales: %s",nazwa_pliku);
  return 0;
}
ODPOWIEDZ