2011-07-11 105 views
0

我只想做一個記錄,隨機以C或D開頭,並且有一個1-10的數字。所以一個記錄將是C10。任何人都可以告訴我我在這裏做錯了什麼?C字符串問題

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/wait.h> 
#include <time.h> 
#include <unistd.h> 
#include <sys/types.h> 

/* 
* 
*/ 
int main(int argc, char** argv) 
{ 
    char letter[] = { 'C', 'D' }; 
    char record[2]; 
    int r=1; 
    while (r < 11) 
    { 
      char num; 
      num = r; 
      record = (letter[rand()%2],num); 
      r++; 
    } 
return 0; 
} 
+0

你得到了什麼錯誤? – Johanisma

+0

您應該閱讀一些關於C字符串的內容(http://en.wikipedia.org/wiki/C_string)。一個c字符串,我是一個以null結尾的char數組。 –

回答

2
record = (letter[rand()%2],num); 

這不是一個法律opporation ...試試這個:

record[0] = letter[rand()%2]; 
record[1] = num; 
+2

'record [1] = num;'不會按照他們的預期工作。你需要'snprintf'它。 – Node

+2

這仍然留下無效的字符串。記錄只有2個字節長,它需要'\ 0'來終止。 –

+0

這假設OP想要一個有效的C字符串(據推測他確實並沒有真正知道它)。然而,這個答案確實解決了引用線的直接問題。然而,OP似乎還沒有意識到其他問題。 –

3

對於一個明顯的一點, 「C10」,需要4個字符,假設你想把它當作一個普通的C字符串(3個字符串+ 1個NUL終結符),但你只剩下2個空間。

至少假設你想讓1-10作爲文本字符,你通常會想要做類似的事情:

sprintf(record, "%c%d", letter[rand()%2], num); 

不是說它很重要,但你似乎包括一個很多爲你正在做的事情不必要的標題。

+0

+1 - 但最好使用'snprintf'。 – Node

+0

@Node想要解釋爲什麼或向我們顯示一個鏈接,告訴我們爲什麼? – rzetterberg

+0

@Node:'snprintf'當然可以有用,但在這裏它並沒有真正添加任何有用的東西。使用它的唯一真正原因是保持它作爲一個好習慣。 –

2

您希望字符'0' - '9'彈出,但您要爲字符r分配0到10之間的數字值。請查看table of ASCII characters

我想嘗試這樣的:

char record[4]; 
for (unsigned r = 0; r <= 10; ++r) { 
    snprintf(record, sizeof(record), "%c%d", letter[rand() % 2], r); 
} 
+1

+1 - 但如果你通過'sizeof(record)'而不是'4'會更好。 – Node

+0

好點,編輯。 – BjoernD