我试图生成一个随机的字符是这样的:C++随机字符
char* test = "myname" + GenerateRandomChar();
我试图做到这一点,而不使用字符串。所以请不要说使用字符串。由于
我试图生成一个随机的字符是这样的:C++随机字符
char* test = "myname" + GenerateRandomChar();
我试图做到这一点,而不使用字符串。所以请不要说使用字符串。由于
如果你正在编写C代码(这看来你是),然后做
char buff[8]; //sizeof("myname") + 1 + 1
sprintf(buff,"myname%c", GenerateRandomChar());
我假设GenerateRandomChar存在和工作
尝试是这样的:
char[] test = "myname\0"; // note char[] instead of char*
test[6] = GenerateRandomChar();
char GenerateRandomChar()
{
return (char) (random(127-33) + 33);
}
,因为它代表你的代码是不正确的原因有两个:
const char*
到char*
。它不应该编译。下面的表达式:
"myname" + c
c
哪里是一些char
不进行级联,而是指针运算。
char *ptr = "myname";
char c = ' '; // ASCII equivalent is 32
int n = (int) c;
char *s = ptr + n; // s now points out of bounds of ptr
如果你坚持做C风格的代码,那么你就需要使用标准库函数strcpy
,并可能strcat
:到这是相似的。例如:
#include <cstdlib>
#include <cstring>
#include <iostream>
char foo() {
// return a random character here
}
int main() {
const char* myname = "myname";
// enough room to contain new character
// and null terminator
char* buffer = new char[strlen(myname) + 2];
// strcpy includes the null terminator
strcpy(buffer, myname);
// We overwrite myname's null terminator
buffer[strlen(myname)] = foo();
buffer[strlen(myname) + 1] = '\0';
std::cout << buffer;
delete[] buffer;
}
您可以将的sizeof添加到缓冲区,所以它是独立焦化长度为:
#include <cstdio>
#include <iostream>
char getRandomChar(){
static char c = 'A' + rand()%24;
return c;
}
int main()
{
srand((unsigned)time(0));
char str[] = "test";
char buffer[sizeof(str)+1];
char rnd = getRandomChar();
sprintf(buffer, "%s%c",str,rnd);
std::cout << buffer << std::endl;
}
注意,getRandomChar()
功能只给出大写字母。如果你想要小写,你将需要更复杂一些。
此解决方案假定您知道编译时的初始字符串的大小。
那么你遇到问题的哪个部分?生成一个随机角色?连接它? – chris 2014-09-12 19:06:22
使用[标准库](http://en.cppreference.com/w/cpp)提供给您的功能将使您的生活如同C++程序员一样容易。使用它们! – 2014-09-12 19:06:27