首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的Concat LPSTR

C语言中的Concat LPSTR
EN

Stack Overflow用户
提问于 2011-11-20 09:46:13
回答 4查看 1.2K关注 0票数 0

尝试使用基本的C语言构建一个从1到52的随机顺序的数字列表(一副纸牌)。一切都正常,但我所有连接字符串并获得结果的尝试都以失败告终。有什么建议吗?注意:这不是作业,这是我用来创建游戏的东西。

代码语言:javascript
复制
// Locals
    char result[200] = "";  // Result
    int card[52];           // Array of cards
    srand(time(0));         // Initialize seed "randomly"

    // Build
    for (int i=0; i<52; i++) {
        card[i] = i;  // fill the array in order
    }

    // Shuffle cards
    for (int i=0; i<(52-1); i++) {
        int r = i + (rand() % (52-i));
        int temp = card[i]; card[i] = card[r]; card[r] = temp;
    }

    // Build result
    for (int c=0; c<52; c++) {

        // Build
        sprintf(result, "%s%d", result, card[c]);

        // Comma?
        if ( c < 51 )
        {
            sprintf(result, "%s%s", result, ",");
        }
    }

我的最终结果总是乱码文本。谢谢你的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-20 09:50:28

我们是在写C++还是C?在C++中,连接字符串只是:

代码语言:javascript
复制
string_out = string_a + string_b

…因为你使用的是std::string

此外,如果这是C++,那么STL就有一个std::shuffle函数。

如果这是C语言,请注意,所有的sprintf都不是连接字符串,它们只是覆盖了旧值。

票数 1
EN

Stack Overflow用户

发布于 2011-11-20 09:53:37

你一直写到"result“的相同位置。

sprintf不会为您执行附加操作。

您可以考虑,在每个sprintf之后,获取返回值(这是写入的字符数),并递增指向结果缓冲区的指针。例如,类似于:

(psuedo代码):

代码语言:javascript
复制
char result[200];
char * outputPtr = result;

for (int c=0; c<52; c++) {

    // Build
    int n = sprintf(outputPtr, "%d%s", card[c], (c<51 ? "," : ""));
    outputPtr += n;
}
票数 4
EN

Stack Overflow用户

发布于 2011-11-20 09:50:51

这将在结果字符串中的每个数字之间添加一个逗号:

代码语言:javascript
复制
// Get a pointer to the result string
char* ptr = &result[0];
for (int c = 0; c < 52; c++) {

   // Add each cards number and increment the pointer to next position
   ptr += sprintf(ptr, "%d", card[c]);

   // Add a separator between each number
   if (c < 51) {
       *ptr++ = ',';
   }
}
// Make sure the result string is null-terminated
*ptr = 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8198825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档