2012-12-15 4 views
0

다른 문자 배열에 텍스트 (문자 배열)를 삽입하려고합니다. 나는이 strcpy를 사용하지만, 때때로 쇼 (항상) 이상한 징후, 좀 걸릴 : 그들char 배열을 다른 char 배열에 삽입하는 방법은 무엇입니까?

enter image description here

어떻게 제거 할 수 있습니까? Heres는

내 코드 : 수정 됨

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

하고 기능 currentDateTime() 지금부터

+0

memset에서 왜'& buf'인지는 배열 이름이 주소를 부여하기 때문에'buf'이어야합니다. – Omkant

+0

이것은 C++가 아닙니다 C –

+0

sprintf는 무엇을위한 것입니까? –

답변

2

잘 작동하는 것 같다, 로컬 변수를 반환 buf하는 정의되지 않은 동작입니다. 이 문자열은 나중에이 함수가 반환 한 문자열과 함께 추가 할 때 확실히 문제가됩니다.

게다가 함수의 서명은 const string이지만 char*을 반환합니다.

+0

가 편집되었습니다. 지금은 잘 작동합니다. 감사합니다. :) –

관련 문제