C字符串问题

C字符串问题,c,C,我只想做一个记录,随机从C或D开始,并附带一个数字1-10。所以记录应该是C10。有人能告诉我我做错了什么吗 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/wait.h> #include <time.h> #include <unistd.h> #include <sys/types.h> /* * */

我只想做一个记录,随机从C或D开始,并附带一个数字1-10。所以记录应该是C10。有人能告诉我我做错了什么吗

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
/*
*
*/
int main(int argc,字符**argv)
{
字符字母[]={C',D'};
字符记录[2];
int r=1;
而(r<11)
{
字符数;
num=r;
记录=(字母[rand()%2],num);
r++;
}
返回0;
}
这不是一个合法的辩论。。。试试这个:

record[0] = letter[rand()%2];
record[1] = num;
有一点很明显,“C10”需要4个字符,假设您希望它是一个普通的C字符串(字符串中的3个+1个NUL终止符),但您只为2个字符腾出了空间

至少假设您希望将1-10作为文本字符,您通常希望执行以下操作:

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

这并不重要,但你似乎在做的事情中包含了很多不必要的标题。

你想让字符“0”-“9”弹出,但你给字符r分配了一个介于0和10之间的数值。看看这本书

我想这样试试:

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

对于(unsigned r=0;r),您应该读一点关于c-strings()的内容。c-string是以null结尾的字符数组。
record[1]=num;
不能像他们期望的那样工作。您需要
snprintf
它。这仍然会留下一个无效的c字符串。记录只有2字节长,需要一个“\0”来终止。这假设OP需要一个有效的c字符串(他可能知道,但实际上并不知道)。但是,这个答案确实解决了引用行的直接问题。OP似乎没有意识到其他问题。+1-但是如果您通过
sizeof(记录)会更好
而不是
4
@Node:
snprintf
有时肯定有用,但在这里它并没有真正添加任何有用的东西。使用它的唯一真正原因是保持它作为一个好习惯。我尝试过这种方法,但它仍然打印出一组附加值。这只是我正在处理的一个更大项目的一部分。@Ancide:
snprintf
将缓冲区的长度作为参数,并返回缓冲区足够大时本应写入的字符数。如果缓冲区比缓冲区小,则表示快乐时光。如果不是,则可以处理错误。您甚至可以调用
snprintf
传递一个
NULL
缓冲区和
0
length,以了解您需要多少空间才能容纳整个c字符串。@Node感谢您的解释!我还有很多问题。但我会详细阅读,而不是在这里开始讨论:)
char record[4];
for (unsigned r = 0; r <= 10; ++r) {
   snprintf(record, sizeof(record), "%c%d", letter[rand() % 2], r);
}