0

テキスト(char配列)を別のchar配列に挿入したい。私はこのstrcpyに使用しましたが、時々(常にではありませんが)奇妙な兆候を示します。見てください:

ここに画像の説明を入力してください

それらを取り除く方法は?

これが私のコードです:

    #include <string>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <iostream>
using namespace std;

const string currentDateTime() {
    time_t now = time(0);
    struct tm tstruct;
    char buf[80];
    tstruct = *localtime(&now);
    strftime(buf, sizeof(buf), "%X", &tstruct);
    return buf;
}

char *addLogin(char *login, char buf[])
{
    string b(buf);
    string l(login);
    string time = currentDateTime();
    string res = time;
    res += l;
    res += b;
    return const_cast<char*>(res.c_str());
}

int main(int argc, char **argv)
{
    char buf[1024];
    strcpy(buf, " some text");
    char *login = "Brian Brown";
    char *temp = addLogin(login, buf);
    strcpy(buf, temp);
    printf("%s\n", buf);
    return 0;
}

編集:

const string currentDateTime() {
    time_t now = time(0);
    struct tm tstruct;
    char buf[80];
    tstruct = *localtime(&now);
    strftime(buf, sizeof(buf), "%X", &tstruct);
    string b(buf);
    return b;
}

今のところうまくいくようです

4

1 に答える 1

2

関数から、未定義動作でcurrentDateTime()あるローカル変数を返します。bufこれは、後で文字列を(この関数によって返される文字列とともに)追加するときに確かに問題になります。

その上、関数のシグネチャはですconst stringが、を返しますchar*

于 2012-12-15T14:43:30.087 に答える