C字符串问题
我只想做一个记录,随机从C或D开始,并附带一个数字1-10。所以记录应该是C10。有人能告诉我我做错了什么吗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> /* * */
#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);
}