Δημοσιεύτηκε: 21 Μαρ 2012, 22:30
Και μια ακόμα απορία.
Έχω τον παρακάτω κώδικα:
Η capitalize() αντικαθιστά κάθε μικρό γράμμα ενός string με το αντίστοιχο κεφαλαίο.
Έτσι όπως είναι ο παραπάνω κώδικας δίνει seg fault.
Το σφάλμα είναι στο σημείο όπου καλώ την capitalize και μαντεύω ότι για κάποιο λόγο το argument που περνάω δεν είναι σωστό.
Αν αντικαταστήσω όμως την func() με:
Θα εκτελεστεί κανονικά ο κώδικας.
Ποιο ακριβώς είναι το λάθος όμως στην πρώτη περίπτωση; Pointer περιμένει η capitalize(), pointer περνάω (ή όχι;).
Έχω τον παρακάτω κώδικα:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void capitalize(char *s)
{
for (; *s; s++)
*s = toupper(*s);
}
void func(char *s)
{
capitalize(s);
puts(s);
}
int main(void)
{
func("string");
return 0;
}
Η capitalize() αντικαθιστά κάθε μικρό γράμμα ενός string με το αντίστοιχο κεφαλαίο.
Έτσι όπως είναι ο παραπάνω κώδικας δίνει seg fault.
Το σφάλμα είναι στο σημείο όπου καλώ την capitalize και μαντεύω ότι για κάποιο λόγο το argument που περνάω δεν είναι σωστό.
Αν αντικαταστήσω όμως την func() με:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
void func(char *s)
{
char x[10];
strcpy(x, s);
capitalize(x);
puts(x);
}
Θα εκτελεστεί κανονικά ο κώδικας.
Ποιο ακριβώς είναι το λάθος όμως στην πρώτη περίπτωση; Pointer περιμένει η capitalize(), pointer περνάω (ή όχι;).