Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα!! Αν γινεται ας μου εξηγησει καποιος γτ οταν μου ζηταει τον δευτερο χαρακτηρα μετα βγαζει παραθυρο των windows και μου λεει οτι σταματησε να δουλευει...Ευχαριστω πολυ

 

#include <stdio.h>
main()
{
    int sum=0;
    int a,k;
    char charac;
    
    printf("give a character: ");
    scanf("%c",&charac);
    
    a=1;
    
    while (sum<=500&&charac!='q')
    {
        printf("give a character: ");
        scanf("%c",charac);
        
        a++;
        k=charac;
        sum=sum+k;
        
    }
    printf("to plhthos twn arithmwn pou diabasthkan einai %d",a);
    return 0;
}

Δημοσ.

Να γράψω και γιατί συμβαίνει αυτό. Όταν λες scanf("%c",charac); ο compiler πάει στη θέση μνήμης που βρίσκεται η μεταβλητή σου και προσπαθεί να αλλάξει την τιμή της(θέσης μνήμης) με αυτή που έλαβε από τη scanf. Όταν γράφεις scanf("%c",&charac); του λες, "άντε σε εκείνη τη θέση μνήμης και αντικατέστησε το περιεχόμενο της με αυτό που θα πάρεις από τη scanf".

Το σύστημα δεν σου δίνει δικαίωμα να πειράζεις τις θέσεις μνήμης, μόνο το περιεχόμενο τους, hence the crash

  • Like 1
Δημοσ.

Θέλεις να περάσεις ως παράμετρο τη διεύθυνση μιας μεταβλητής γιατί η scanf αλλάζει την τιμή της. Αν περάσεις τα περιεχόμενά της, τότε η scanf τα λαμβάνει σα μια διεύθυνση η οποία στις περισσότερες περιπτώσεις είναι άκυρη τιμή. Στο runtime γίνονται αυτά, όχι κατά το compilation.

 

Προσπάθησε να καταλάβεις τι γίνεται εδώ:

#include <stdio.h>

int main(void)
{
	unsigned int damn = &damn+0x1;
	scanf("%u", damn);
	printf("%u\n", *(&damn+0x1));

	return 0;
}

http://ideone.com/iuk9Yc

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...