2011-07-11 72 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