• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 16, 2025, 13:59:19 pm

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
June 16, 2025, 13:59:19 pm

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
[Αρχές Οικονομίας] Να επι...
by _Trob
[Today at 13:28:21]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[Today at 12:13:45]

Αποτελέσματα Εξεταστικής ...
by Nikos_313
[Today at 12:01:53]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by George_RT
[Today at 10:22:18]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[Today at 01:56:37]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by nmpampal
[Today at 00:16:23]

Ισραήλ - Ιράν: Πόλεμος στ...
by Katarameno
[June 15, 2025, 20:08:49 pm]

Αντικατάστασης πυκνωτή σε...
by nmpampal
[June 15, 2025, 16:25:56 pm]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]

[Λογισμός ΙΙ] Απορίες σε...
by el mariachi
[June 14, 2025, 20:47:07 pm]

ΠΡΟΣΟΧΗ στο ανέβασμα θεμά...
by tzortzis
[June 14, 2025, 16:54:08 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by el mariachi
[June 14, 2025, 11:56:45 am]

Πότε θα βγει το μάθημα; -...
by Nikos_313
[June 14, 2025, 10:00:55 am]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[June 14, 2025, 09:58:14 am]

Αλέξης Τσίπρας, η επιστρο...
by Yamal
[June 14, 2025, 04:42:23 am]

Έναρξη Δηλώσεων Συμμετοχή...
by IEEE SB
[June 14, 2025, 00:10:19 am]

[Δυναμική Συμπεριφορά ΣΗΕ...
by soko_freta
[June 13, 2025, 01:05:36 am]

[Εφ.Θερμοδυναμική]Παλιά θ...
by Giannis Masterio
[June 12, 2025, 22:30:38 pm]

Paid Internships in a Eur...
by okan
[June 12, 2025, 22:30:02 pm]
Στατιστικά
Members
Total Members: 9959
Latest: valco08
Stats
Total Posts: 1426669
Total Topics: 31711
Online Today: 201
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 51
Guests: 130
Total: 181
EiriniGeo
faidonchatz
gp6
JoHn!
Nikos_313
anna.ts
cpapadd
zille
mikrosdia
george14
vasilis saitis
nikolakys
Antigoni
vaggelisx
Antreas17
Vasilis Koudounis
Konstantinoy
George_RT
DimStyl
adamchatz
AcDimitri
tinidou
chatzisot
apapathe
Mr Watson
panagiwt1s
mmikelo
trelogauros7
Dimosthenis
geo66
Bill g
theodorevic
dimitris_diotis
serafeim
Tesla_1
dseid
stefpapa21
coyg
giorgosss03
ONETWIN
Nianaro
gcheristanidhs
jimalexoud
Soterd52
nchatzo
Domnious
dkoukn
prizas
Panagismark
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Συμβουλές καλής χρήσης του φόρουμ: Youtube embed code and links, Shoutbox, Notify, ...
Δείτε περισσότερα εδώ...
THMMY.gr > Forum > Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα > Περί Υπολογιστών... > Software > Προγραμματισμός (C, VB, Delphi, PHP, ASP...) > C / C++ / C# (Moderators: chatzikys, PolarBear) > C πρόβλημα
0 Members and 1 Guest are viewing this topic.
Pages: [1] Go Down Print
Author Topic: C πρόβλημα  (Read 1557 times)
Themis
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Posts: 518


View Profile
C πρόβλημα
« on: September 18, 2012, 03:14:19 am »

Λοιπον. Εχω το εξής θέμα με ένα πρόγραμμα μου στη C.

        int bytes_read;
   int rv;
   int nchars=200;/*max possible number for the input of the user*/
   size_t nbytes=(sizeof(char))*nchars; /*size of chars in bytes*/
   char *commands[2];
   char *line=(char*) malloc(nbytes+1);
   bytes_read=getline(&line,&nbytes,stdin);/*read line from stdin*/
   if(bytes_read == -1){printf("Read line error");exit(-1);}/*error handling for bytes_read*/
   else{
      if(line[strlen(line-1)]=='\n'){
               line[strlen(line-1)]='\0';/*change new line character in the end of the line of stdin*/
            }}
   if(strcmp(line,"exit")==0){
            rv=3;
            exit(rv);
   }
   commands[0]=line;
   commands[1]=(char*)NULL;
   execvp(commands[0],commands);
   perror("Execution error");
   exit(-1);


Μπορεί κάποιος να μου τι γίνεται λάθος στη κοκκινη γραμμή και μου βγάζει error : not such a file or directory η  execvp ενώ όταν βάλω πχ απλά commands[0]="ls"; όλα κομπλέ??????
Logged
4Dcube
Veteran
Καταστραμμένος
******
Gender: Male
Posts: 9068


just.do.it.cut.carrots.


View Profile
Re: C πρόβλημα
« Reply #1 on: September 18, 2012, 04:58:15 am »

μήπως δεν έχεις δεσμεύσει καλά τη μνήμη;
αντί να δηλώσεις
Code:
char *line=(char*) malloc(nbytes+1);
ξέχνα το line και βάλε κατευθείαν
Code:
commands[0]=(char*) malloc(nbytes+1);

ή κάντα και τα δυο ξερωγω
Logged

https://www.youtube.com/watch?v=6CAzdawCzhg
fugiFOX
Veteran
Καταστραμμένος
******
Posts: 8962


Fugi+Fox μια νέα μορφή ζωής...


View Profile
Re: C πρόβλημα
« Reply #2 on: September 18, 2012, 08:46:34 am »

dokimase
commands = line

επίσης η αντιγραφή string στη C γίνειται με την strcpy()
και όχι απευθείας ανάθεση
Logged

http://www.mozilla.org/en-US/firefox/new/
zisis00
Καταξιωμένος/Καταξιωμένη
***
Posts: 176


View Profile
Re: C πρόβλημα
« Reply #3 on: September 18, 2012, 12:52:15 pm »

Quote from: Themis on September 18, 2012, 03:14:19 am
Λοιπον. Εχω το εξής θέμα με ένα πρόγραμμα μου στη C.

        int bytes_read;
   int rv;
   int nchars=200;/*max possible number for the input of the user*/
   size_t nbytes=(sizeof(char))*nchars; /*size of chars in bytes*/
   char *commands[2];
   char *line=(char*) malloc(nbytes+1);
   bytes_read=getline(&line,&nbytes,stdin);/*read line from stdin*/
   if(bytes_read == -1){printf("Read line error");exit(-1);}/*error handling for bytes_read*/
   else{
      if(line[strlen(line-1)]=='\n'){
               line[strlen(line-1)]='\0';/*change new line character in the end of the line of stdin*/

            }}
   if(strcmp(line,"exit")==0){
            rv=3;
            exit(rv);
   }
   commands[0]=line;
   commands[1]=(char*)NULL;
   execvp(commands[0],commands);
   perror("Execution error");
   exit(-1);


Μπορεί κάποιος να μου τι γίνεται λάθος στη κοκκινη γραμμή και μου βγάζει error : not such a file or directory η  execvp ενώ όταν βάλω πχ απλά commands[0]="ls"; όλα κομπλέ??????

Το λάθος σου έιναι αυτό που έκανα bold. Η getline() κρατάει και το \n γι'αυτό η execvp σου πετάει ότι νά 'ναι. Το if(line[strlen(line-1)]=='\n' πρέπει να γίνει if(line[ strlen(line) - 1 ] == '\n'). Το ίδιο πρέπει να κάνεις και στη σειρά από κάτω για να σου τρέξει σωστά.. Είναι προφανές τι γίνεται λάθος και γαμιέται..
Quote from: fugiFOX on September 18, 2012, 08:46:34 am
dokimase
commands = line

επίσης η αντιγραφή string στη C γίνειται με την strcpy()
και όχι απευθείας ανάθεση
Τo commands = line θα πετάξει error γιατι το commands είναι array of pointers ενώ το line είναι απλός pointer. Το commands[0] = line μπορεί να μην αντιγράφει (όπως σωστά λες) το line στο command, αναθέτει όμως την τιμη του line (εκει που δείχνει το line, δηλαδή στην εντολή που θα διαβάσει από το stdin) στο commands[0] και μπορείς να χρησιμοποιείς το comammand[0] αντι του line.
Logged
BOBoMASTORAS
Veteran
Καταστραμμένος
******
Posts: 6082


It just doesn't get any easier! It gets worse...


View Profile
Re: C πρόβλημα
« Reply #4 on: September 18, 2012, 14:27:12 pm »

επίσης συχνό πρόβλημα:

η exec* δεν έχει ορισμένη την μεταβλητή PATH. Ως εκ δε μπορεί να βρει που είναι το εκτελέσιμα για να τα εκτελέσει. Βάλε full path ή όρισε την μεταβλητή PATH με την setenv.
Logged

Της γενιάς μου βασιλιά,
μην κατέβεις τα σκαλιά.
Πιες αθάνατο νερό
να νικήσεις τον καιρό.

http://tools.ietf.org/html/rfc1149
The only reason we invent robots
SolidSNK
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 4617


free()'d and attuned


View Profile
Re: C πρόβλημα
« Reply #5 on: September 18, 2012, 16:46:35 pm »

Quote from: BOBoMASTORAS on September 18, 2012, 14:27:12 pm
επίσης συχνό πρόβλημα:

η exec* δεν έχει ορισμένη την μεταβλητή PATH. Ως εκ δε μπορεί να βρει που είναι το εκτελέσιμα για να τα εκτελέσει. Βάλε full path ή όρισε την μεταβλητή PATH με την setenv.
Όχι όλες, εκείνες που δεν τελειώνουν σε "e", παίρνουν το environment από την calling process, η οποία αναμένεται να έχει set το PATH.

Btw Themis για input θα χρησιμοποιούσα την πιο συνηθισμένη fgets (όχι πως η getline έχει θέμα), ενώ για debug τον gdb.
Logged

"Savior, conqueror, hero, villain. You are all things, Revan, and yet you are nothing. In the end you belong to neither the light nor the darkness. You will forever stand alone."
BOBoMASTORAS
Veteran
Καταστραμμένος
******
Posts: 6082


It just doesn't get any easier! It gets worse...


View Profile
Re: C πρόβλημα
« Reply #6 on: September 19, 2012, 13:08:25 pm »

Quote from: SolidSNK on September 18, 2012, 16:46:35 pm
Quote from: BOBoMASTORAS on September 18, 2012, 14:27:12 pm
επίσης συχνό πρόβλημα:

η exec* δεν έχει ορισμένη την μεταβλητή PATH. Ως εκ δε μπορεί να βρει που είναι το εκτελέσιμα για να τα εκτελέσει. Βάλε full path ή όρισε την μεταβλητή PATH με την setenv.
Όχι όλες, εκείνες που δεν τελειώνουν σε "e", παίρνουν το environment από την calling process, η οποία αναμένεται να έχει set το PATH.

nop

The execle() and execvpe() functions allow the caller to specify the environment of the executed program via the argument envp. The envp argument is an array of pointers to null-terminated strings and must be terminated by a NULL pointer. The other functions take the environment for the new process image from the external variable environ in the calling process.
Logged

Της γενιάς μου βασιλιά,
μην κατέβεις τα σκαλιά.
Πιες αθάνατο νερό
να νικήσεις τον καιρό.

http://tools.ietf.org/html/rfc1149
The only reason we invent robots
Themis
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Posts: 518


View Profile
Re: C πρόβλημα
« Reply #7 on: September 19, 2012, 13:59:57 pm »

Quote from: zisis00 on September 18, 2012, 12:52:15 pm
Quote from: Themis on September 18, 2012, 03:14:19 am
Λοιπον. Εχω το εξής θέμα με ένα πρόγραμμα μου στη C.

        int bytes_read;
   int rv;
   int nchars=200;/*max possible number for the input of the user*/
   size_t nbytes=(sizeof(char))*nchars; /*size of chars in bytes*/
   char *commands[2];
   char *line=(char*) malloc(nbytes+1);
   bytes_read=getline(&line,&nbytes,stdin);/*read line from stdin*/
   if(bytes_read == -1){printf("Read line error");exit(-1);}/*error handling for bytes_read*/
   else{
      if(line[strlen(line-1)]=='\n'){
               line[strlen(line-1)]='\0';/*change new line character in the end of the line of stdin*/

            }}
   if(strcmp(line,"exit")==0){
            rv=3;
            exit(rv);
   }
   commands[0]=line;
   commands[1]=(char*)NULL;
   execvp(commands[0],commands);
   perror("Execution error");
   exit(-1);


Μπορεί κάποιος να μου τι γίνεται λάθος στη κοκκινη γραμμή και μου βγάζει error : not such a file or directory η  execvp ενώ όταν βάλω πχ απλά commands[0]="ls"; όλα κομπλέ??????

Το λάθος σου έιναι αυτό που έκανα bold. Η getline() κρατάει και το \n γι'αυτό η execvp σου πετάει ότι νά 'ναι. Το if(line[strlen(line-1)]=='\n' πρέπει να γίνει if(line[ strlen(line) - 1 ] == '\n'). Το ίδιο πρέπει να κάνεις και στη σειρά από κάτω για να σου τρέξει σωστά.. Είναι προφανές τι γίνεται λάθος και γαμιέται..
Quote from: fugiFOX on September 18, 2012, 08:46:34 am
dokimase
commands = line

επίσης η αντιγραφή string στη C γίνειται με την strcpy()
και όχι απευθείας ανάθεση
Τo commands = line θα πετάξει error γιατι το commands είναι array of pointers ενώ το line είναι απλός pointer. Το commands[0] = line μπορεί να μην αντιγράφει (όπως σωστά λες) το line στο command, αναθέτει όμως την τιμη του line (εκει που δείχνει το line, δηλαδή στην εντολή που θα διαβάσει από το stdin) στο commands[0] και μπορείς να χρησιμοποιείς το comammand[0] αντι του line.

Αυτό με το line[strlen(line-1)] ήταν το πρόβλημα. Ευχαριστώ πολύ παιδιά για την βοήθεια. ΤΗΜΜΥ μετράει αν και είχα καιρο να το χρησιμοποιήσω. Θα συνεχίσω να σας προτιμώ αλάνια.
Logged
Pages: [1] Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...