C ++随机字符

时间:2014-09-12 19:05:02

标签: c++ random char

我正在尝试生成这样的随机字符:

char* test = "myname" + GenerateRandomChar();

我正在尝试不使用字符串。所以请不要说使用字符串。感谢

4 个答案:

答案 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)

您的代码不正确有两个原因:

  1. 您正在执行从const char*char*的已弃用转化。它不应该编译。
  2. 您正在执行指针运算,而不是连接。
  3. 以下表达式:

    "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;
    }