我試圖生成一個隨機的字符是這樣的: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