Losowanie łańcucha znaków C

Odpowiedz Nowy wątek
2015-02-21 19:19
0

Napisałem funkcję, która w teorii powinna losować łańcuchy znaków C. Funkcja działa, jednak kiedy wywołam ją np. 3 razy pod rząd, to dostaję 3 razy ten sam łańcuch. srand() jest w mainie.

char* rndchar(){
    char temp[7];
    for(int j=0; j<6; j++){
        temp[j]='A'+rand()%26;
    }
    return temp;
}

Gdzie znajduje się błąd?

Pozostało 580 znaków

2015-02-22 08:09
1

Ja tutaj widzę co najmniej 2 błędy:
po 1 primo zwracasz wskaźnik do lokalnej zmiennej temp
po 2 primo nie konczysz zwracanego łańcucha zerem.

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

#define SIZE 10

void randstring(char *s, unsigned size)
{
    int i;
    for(i=0; i<size-1; ++i)
    {
        s[i] = 'A' + rand()%26;
    }
    s[++i] = '\0';
}

int main(int argc, char const *argv[])
{
    /* code */
    srand(time(0));
    char str[SIZE];
    for(int i=0; i<5; ++i)
    {
        randstring(str, SIZE);
        printf("%s\n", str);
    }
    return 0;
}

oczywiście ja również mogłem coś przeoczyć ale mam nadzieję, że tak się nie stało.

2015-02-22 13:19
Świetny Krawiec
0

Potrzebuję funkcji, która zwraca losowy łańcuch, a nie zapisuje go do podanej zmiennej

Pozostało 580 znaków

2015-02-22 13:20
0

Potrzebuję funkcji, która zwraca losowy łańcuch, a nie zapisuje go do podanej zmiennej. Po dodaniu linijki, która kończy łańcuch zerem, nadal zwraca te same łańcuchy.

edytowany 1x, ostatnio: eilchner, 2015-02-22 13:30
To sobie napisz. :-/ - Endrju 2015-02-22 13:21
Napisałem. Nie wiem dlaczego nie działa. Zbędny komentarz, który nic nie wnosi. - eilchner 2015-02-22 13:28
A wniosek swoją niedziałającą funkcje? - spartanPAGE 2015-02-22 13:31
@twar przecież napisał Ci, dlaczego nie działa! - Endrju 2015-02-22 13:32

Pozostało 580 znaków

2015-02-22 13:27
0

memcpy i odpowiedni zwracany typ

Pozostało 580 znaków

2015-02-22 14:25
0

Nadal niezbyt rozumiem.

Pozostało 580 znaków

2015-02-22 14:28
0
eilchner napisał(a):

Nadal niezbyt rozumiem.

Pamięć którą zwracasz jest już po terminie waznosci

Pozostało 580 znaków

2015-02-22 14:35
0
eilchner napisał(a):

Potrzebuję funkcji, która zwraca losowy łańcuch, a nie zapisuje go do podanej zmiennej.

Wersja od twara zmieniona na potrzeby ww wymagania:

char *randstring(char *s, unsigned size)
{
    int i;
    for(i=0; i<size-1; ++i)
    {
        s[i] = 'A' + rand()%26;
    }
    s[++i] = '\0';
    return s;
}

W C++ można zrobić trochę wygodniej - bez argumentu wejściowego "s", ale będzie to wolniejsze.


Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 1x, ostatnio: vpiotr, 2015-02-22 14:36

Pozostało 580 znaków

2015-02-22 14:41
0

Program jest w C++, tylko potrzebuję też, oprócz funkcji losującej stringi (to już mam), funkcję do łańcuchów char. Jak można to zrobić bez argumentu wejściowego?

Pozostało 580 znaków

2015-02-22 15:29

Zajrzyj tutaj:

http://codereview.stackexchan[...]/random-string-generator-in-c


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

2015-02-22 15:59
0

Podziałało. Wystarczyło dać

char *temp;
temp=new char[7];

zamiast

char temp[7];

Możesz mi wyjaśnić, dlaczego mój sposób nie działał, a ten już tak? Z czystej ciekawości

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0