[英]Linked List in C
我正在c中練習鏈表,我想使用rand在節點中存儲字符,但是列表中的最后一個字母重復了,誰能看到會發生什么?
用這個函數我填充節點:
nodo* nodoListas(nodo*Lista){
int i;
char *elemento, caracter;
srand (time(NULL));
for (i = 0; i< CANT_NODOS; i++){
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
Lista = agregarNodo (Lista, elemento);
}
}
這是 agregarNodo 函數:
nodo* agregarNodo (nodo* Lista, char* elemento){
nodo* nuevoNodo, *aux;
nuevoNodo = (nodo*) malloc (sizeof(nodo));
nuevoNodo -> elemento = elemento;
nuevoNodo -> siguiente = NULL;
if(Lista == NULL){
Lista = nuevoNodo;
}
else{
aux = Lista; //para no perder el elemento
while(aux->siguiente != NULL){
aux = aux -> siguiente;
}
aux-> siguiente = nuevoNodo;
}
return Lista;
}
這是我正在做的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CANT_NODOS 5
typedef struct Nodo{
char* elemento;
struct Nodo* siguiente; /*vinculo para unir mas nodos*/
}nodo;
//funcion que genera o crea una lista
nodo* ListaElementos(nodo* Lista){
Lista = NULL ;
return Lista;
}
// funcion que agrega nodos a la lista
nodo* agregarNodo (nodo* Lista, char* elemento){
nodo* nuevoNodo, *aux;
nuevoNodo = (nodo*) malloc (sizeof(nodo));
nuevoNodo -> elemento = elemento;
nuevoNodo -> siguiente = NULL;
if(Lista == NULL){
Lista = nuevoNodo;
}
else{
aux = Lista; //para no perder el elemento
while(aux->siguiente != NULL){
aux = aux -> siguiente;
}
aux-> siguiente = nuevoNodo;
}
return Lista;
}
//Funcion que libera la memoria
void LiberarLista (nodo* Lista ){
free (Lista);
}
nodo* Lista1;
nodo* Lista2;
nodo* nodoListas(nodo*Lista){
int i;
char *elemento, caracter;
srand (time(NULL));
for (i = 0; i< CANT_NODOS; i++){
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
Lista = agregarNodo (Lista, elemento);
}
}
int main(void){
Lista1 = ListaElementos(Lista1);
Lista2 = ListaElementos(Lista2);
Lista1 = nodoListas(Lista1);
//impresion Lista 1
while (Lista1 != NULL){
printf("%s\t", Lista1->elemento);
Lista1 = Lista1 -> siguiente;
}
return 0;
}
當你這樣做時:
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
您正在聲明為字符的內存空間中寫入新的隨機值,然后將指針 (elemento) 放入該內存空間。 但是您總是在所有 for 循環中使用相同的內存空間字符。 所以你總是在同一個地方寫作並指向同一個地方,只是更新它的值,因此重復最后一個字符值。
你總是在你的代碼中指向相同的內存
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
您可以使用
caracter=malloc(sizeof(char));
*caracter = /*(char*)*/(65 +rand()% 25);
//sleep(1);
elemento = caracter;
順便說一句,您應該在這里使用字符數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.