Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 05 Φεβ 2012, 21:54

Aπλα διαβαζω λιγο για το heap και το stack επειδη καθως διαβαζα για δεικτες και συναρτησεις το ειδα σαν λεξη και μου κινησε ξανα την περιεργεια....

Μπηκα και σε ενα ξενο τσατ να ρωτησω και μου ειπαν πως δεν εχει σχεση το ενα με το αλλο... δηλαδη ο τιτλος memory layout in C ειναι λαθος
και πως δεν υπαρχουν heap και stack στην C.

btw
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 05 Φεβ 2012, 21:58

Star_Light έγραψε:
...
Μπηκα και σε ενα ξενο τσατ να ρωτησω και μου ειπαν πως δεν εχει σχεση το ενα με το αλλο... δηλαδη ο τιτλος memory layout in C ειναι λαθος
και πως δεν υπαρχουν heap και stack στην C.
btw

Είναι platform/architecture dependent.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 05 Φεβ 2012, 21:59

Oh god! thank you migf1 !

ΜΟυ σπασανε τα νευρα εκει μεσα. Δεν ξερω και τελεια αγγλικα αλλα μου λεγανε αυτοι
αλλα καταλαβαινα εγω... αλλα τους ελεγα στο τελος μου προτειναν να παω σε ενα τρελοκομειο και εκανα quit
χωρις να πω τιποτα γιατι την ειχα ασχημα :lol: :lol: :lol:

btw πρεπει να κατσω να φτιαξω και τα αγγλικα μου.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 06 Φεβ 2012, 03:06

migf1 έγραψε:
Spoiler: show
stamatiou έγραψε:Θέλω να κάνω ένα πρόγραμμα για να οργανώσω την βιβλιοήκη μου και θέλω να το κάνω έτσι ώστε να καταγράφει το τίτλο σε ένα txt file και να το διαβάζει σε κάθε εκκίνηση μεταφέροντάς το σε ένα διπλό πίνακα...

Με fixed μέγιστο πλήθος γραμμών και fixed μέγιστο μήκος της καθεμιάς, είναι πολύ εύκολο...

Κώδικας: Επιλογή όλων

int main( void )
{
int i = 0;
char arrstr[ NSTRINGS ][ MAXSTRLEN ] = { {'\0'} }; /* array of c-strings */
FILE *fp = fopen("test4.c", "r");

if ( !fp ) {
fputs("*** fatal error: Could not open file!\n", stderr);
exit( EXIT_FAILURE );
}

for (i=0; i < NSTRINGS && fgets( arrstr[i], MAXSTRLEN, fp); i++ )
{
/* remove '\n', if any, from end of just-read line */
size_t len = strlen( arrstr[i] ) - 1;
if ( arrstr[i][len] == '\n' )
arrstr[i][len] = '\0';
}

print_arrstr( arrstr );

fclose( fp );
exit( EXIT_SUCCESS );
}

Και μιας και το θυμήθηκα, εδώ είχα γράψει παλιότερα ένα μικρό πρόγραμμα που τυπώνει τον πηγαίο του αρχείο, χωρίς να ορίζει από πριν μέγιστο μήκος για τις γραμμές που διαβάζει (για κάθε γραμμή ξεκινάει με μήκος 80 χαρακτήρων, κι αν χρειάζονται περισσότεροι δεσμεύει άλλους 80 και πάει λέγοντας).

Πιθανόν να συ φανεί κι αυτό χρήσιμο.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 06 Φεβ 2012, 22:27

migf1 έγραψε:
stamatiou έγραψε:Θέλω να κάνω ένα πρόγραμμα για να οργανώσω την βιβλιοήκη μου και θέλω να το κάνω έτσι ώστε να καταγράφει το τίτλο σε ένα txt file και να το διαβάζει σε κάθε εκκίνηση μεταφέροντάς το σε ένα διπλό πίνακα...

Με fixed μέγιστο πλήθος γραμμών και fixed μέγιστο μήκος της καθεμιάς, είναι πολύ εύκολο...

Κώδικας: Επιλογή όλων

int main( void )
{
int i = 0;
char arrstr[ NSTRINGS ][ MAXSTRLEN ] = { {'\0'} }; /* array of c-strings */
FILE *fp = fopen("test4.c", "r");

if ( !fp ) {
fputs("*** fatal error: Could not open file!\n", stderr);
exit( EXIT_FAILURE );
}

for (i=0; i < NSTRINGS && fgets( arrstr[i], MAXSTRLEN, fp); i++ )
{
/* remove '\n', if any, from end of just-read line */
size_t len = strlen( arrstr[i] ) - 1;
if ( arrstr[i][len] == '\n' )
arrstr[i][len] = '\0';
}

print_arrstr( arrstr );

fclose( fp );
exit( EXIT_SUCCESS );
}

Και για να μπορέσω να γράψω στο αρχείο ότι αλλαγές έγιναν στο array όταν κλείσει το πρόγραμμα τότε θα γράψω:
fp = fopen("test4.c","w+");
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 07 Φεβ 2012, 00:27

Μιας και έγινε λόγος χθες για στοίβες κτλπ

έφτιαξα ενα μικρό προγραμματάκι που "υλοποιεί" την στοίβα μια dummy υλοποιηση βασικα
χωρις δεικτες κτλπ.

http://ideone.com/wCDuz
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 07 Φεβ 2012, 03:47

@star_light: έτσι σε θέλω: αρχή, μέση και τέλος :) Υλοποίησέ την όμως με τις σωστές πράξεις της (συναρτήσεις): push(), pop(), top() και isempty() ... http://en.wikipedia.org/wiki/Stack_%28a ... definition

@stamatiou: με το w+ κάνει append στα υπάρχοντα, με σκέτο w ξαναγράφει το αρχείο από την αρχή.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 07 Φεβ 2012, 04:11

migf1 έγραψε:@star_light: έτσι σε θέλω: αρχή, μέση και τέλος :) Υλοποίησέ την όμως με τις σωστές πράξεις της (συναρτήσεις): push(), pop(), top() και isempty() ... http://en.wikipedia.org/wiki/Stack_%28a ... definition

@stamatiou: με το w+ κάνει append στα υπάρχοντα, με σκέτο w ξαναγράφει το αρχείο από την αρχή.


Καλα αυτό δεν είναι στοίβα αλλα "στοίβα" :D καταρχήν η στοίβα οπως γράφει και στο λινκ που μου έδωσες ειναι δομή δεδομένων!
Απλα σήμερα είπα να πάρω λιγο ρεπό απο δείκτες , δομές και όλα αυτα :D οποτε είπα να φτιάξω κατι πολυ simple. Μη νομιζεις
30 - 40 λεπτάκια μου πήρε και αυτο διοτι καθόμουν σε overflow στο loop που κάνει το stack και καλα. -.-
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 07 Φεβ 2012, 20:34

Λοιπόν, έκανα το πρώτο βήμα. Έφτιαξα μια συνάρτηση πυο να μεταφέρει μια 2d array σε ένα αρχείο: http://ideone.com/7FBEA
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 07 Φεβ 2012, 22:43

Σου τα έβαλα όλα μαζί (κάνε δοκιμές με την main() για τεστ των 2 συναρτήσεων)...

Κώδικας: Επιλογή όλων

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

#define NSTRINGS 20
#define MAXSTRLEN 100

/*****************************************************//**
*
*********************************************************
*/
int print_arrstr( char arrstr[NSTRINGS][MAXSTRLEN] )
{
int i;

for (i = 0; i < NSTRINGS && arrstr[i][0] != '\0'; i++)
printf( "%d: %s\n", i, arrstr[i] );

return 0;
}

/*****************************************************//**
*
*********************************************************
*/
int fread_arrstr( char arrstr[NSTRINGS][MAXSTRLEN], const char *fname )
{
int i = 0;
FILE *fp = NULL;

if ( !arrstr || !fname || NULL == (fp=fopen(fname, "r")) )
return 0; /* FALSE */

for (i=0; i < NSTRINGS && fgets(arrstr[i], MAXSTRLEN, fp); i++ )
{
/* remove '\n', if any, from end of just-read line */
size_t len = strlen( arrstr[i] ) - 1;
if ( arrstr[i][len] == '\n' )
arrstr[i][len] = '\0';
}

if ( ferror(fp) )
i = 0;

fclose( fp );
return i; /* number of lines read */
}

/*****************************************************//**
*
*********************************************************
*/
int fprint_arrstr( char arrstr[NSTRINGS][MAXSTRLEN], const char *fname )
{
int i = 0;
FILE *fp = NULL;

if ( !arrstr || !fname || NULL == (fp=fopen(fname, "w")) )
return 0; /* FALSE */

for (i = 0; i < NSTRINGS && arrstr[i][0] != '\0'; i++)
{
if ( fprintf( fp, "%s\n", arrstr[i] ) < 0 ) {
fclose(fp);
return 0; /* FALSE */
}
}

fclose( fp );
return 1; /* TRUE */
}

/*****************************************************//**
*
*********************************************************
*/
int main( void )
{
int nlines;
char *fname = "test5.txt";
char arrstr[NSTRINGS][MAXSTRLEN] = { {'\0'} };

printf("%d lines read form file %s\n", fread_arrstr(arrstr, fname), fname );
print_arrstr( arrstr );
#if 0
if ( !fprint_arrstr( arrstr, fname) )
fputs("*** failed or incomplete file writing...\n", stderr);
#endif
return 0;
}
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι