我正在尝试生成这样的随机字符:
char* test = "myname" + GenerateRandomChar();
我正在尝试不使用字符串。所以请不要说使用字符串。感谢
答案 0 :(得分:5)
如果您正在编写c代码(您似乎是这样),那么
char buff[8]; //sizeof("myname") + 1 + 1
sprintf(buff,"myname%c", GenerateRandomChar());
我假设GenerateRandomChar存在并正常工作
答案 1 :(得分:1)
尝试这样的事情:
char[] test = "myname\0"; // note char[] instead of char*
test[6] = GenerateRandomChar();
char GenerateRandomChar()
{
return (char) (random(127-33) + 33);
}
答案 2 :(得分:1)
您可以在缓冲区中添加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()
函数仅提供大写字母。如果你想要小写的话,你需要更加柔和。
此解决方案假定您在编译时知道初始字符串的大小。
答案 3 :(得分:0)
您的代码不正确有两个原因:
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;
}