2012-02-23 63 views
0

我寫了一個函數來產生隨機的名字。這是我的代碼返回一個字符數組

char *getrandumstring(int n) 
{ 
    int i; 
    char *str; 

    for(i=0;i<n;i++) 
    { 


    str[i] = (rand() % 26) + 'a'; 
    } 

    str[i]='\0'; 

    return str; 
} 

現在在該行

str[i] = (rand() % 26) + 'a'; 

我得到分割故障。爲什麼?

回答

1

您正在收到分段錯誤,因爲在創建指針時,您沒有爲其分配任何後備存儲。

char *getRandomString (int n) { 
    int i; 
    char *str = malloc (n + 1); 
    if (str != NULL) { 
     for (i = 0; i < n; i++) 
      str[i] = (rand() % 26) + 'a'; 
     str[n] = '\0'; 
    } 
    return str; 
} 

上面的代碼將成功分配內存並返回緩衝區。或者,如果沒有可用的內存,它將返回NULL。只要記得在完成時釋放它。

另外,如果你不想使用動態內存分配,讓來電者提供緩衝,以及:

void getRandomString (char *str, int n) { 
    int i; 
    for (i = 0; i < n; i++) 
     str[i] = (rand() % 26) + 'a'; 
    str[n] = '\0'; 
} 

// Somewhere else in your code: 

#define STR_SZ 20 
char buffer[STR_SZ+1]; 
getRandomStr (buffer, sizeof(buffer) - 1); 
+0

謝謝。我用第二個。但也首先了解。 – Heartly 2012-02-23 07:53:01