yol açar, Char-işaretçiler bir dizi için bellek tahsis:C Sınıflandırma: işaretçiler pompalanması beklenmedik sonuçların programm başlangıcında
char **buffer = calloc(20, sizeof(char *));
Sonra kullanıcı girebilir 20 kelime kadar:
buffer[i] = calloc(40, sizeof(char));
fgets(buffer[i], 40, stdin)`
Daha sonra bu diziyi sıralamak istiyorum.
void swap(char *args1, char *args2) {
char tmp[40];
strcpy(tmp, args1);
strcpy(args1, args2);
strcpy(args2, tmp);
}
void sort(char **args, int count) {
...
swap(args[i], args[j]);
...
}
bu sayede düşünme sonra bu aslında tekabül eden dizeleri işaretçiler yönlendirme edildi yapmak zorunda olduğunu çünkü CPU kaybı bulunduğunu fark etti: Bu aşağıdaki gibi benim takas işlevini kullanın, beklendiği gibi çalışır.
void swap(char **args1, char **args2) {
char *tmp = *args1;
*args1 = *args2;
*args2 = tmp;
}
void sort(char **args, int count) {
...
swap(&args[i], &args[j]);
...
}
Ancak bu ... Benim anlayış oldu (Birkaç printf aramaları ve etajer denedik) neden çözemiyorum, sonuçları son derece beklenmedik, hiç çalışmaz: Yani benim takas işlevini yeniden yazdı işaretçileri sadece yönlendirildi ve böylece takas olduğunu, bellek şöyle diyelim: pointer ile 100'de takas işaretçisi: Benim fikrim yerine İşte asgari CPU çaba (için dizilerin işaretçileri değiştirmeye oldu
(begin of char**):
100: *160
108: *200
116: *240
124: *280
...
(begin of char*):
160: Hello!\0
200: World!\0
...
108):
(begin of char**):
100: *200
108: *160
116: *240
124: *280
...
(begin of char*):
160: Hello!\0
200: World!\0
...
Bunu olabildiğince ayrıntılı olarak açıklamaya çalıştım ve çok fazla açıklama varsa özür dilerim. Birisi bana bu konuda fikir verebilir ve yardım ederse çok sevinirim!
(çalışma strcpy ile) tam kod burada bulunabilir: http://pastie.org/5361481
Çalışmayan kodun tam koduna ne dersiniz? –
Çalışmayan kod yalnızca değiştirilen takas yöntemiyle ve aramalarla ilgilidir: http://pastie.org/5361515 – Danyel
Kod boyunca satır satır adım, bir hata ayıklayıcısını deneyin (küçük bir girdi grubu için). –