를 호출 할 때 우리가 사용할 수 있습니다형식 문자열 ++ C#의 기능
function_name("This is test number: " + i);
어떻게 그것을 C에서 할 수 ++? i
다음, 문자열 + i
정수라면, 당신은 실제로
function_name("This is test number: " + std::to_string(i));
를 호출 할 때 우리가 사용할 수 있습니다형식 문자열 ++ C#의 기능
function_name("This is test number: " + i);
어떻게 그것을 C에서 할 수 ++? i
다음, 문자열 + i
정수라면, 당신은 실제로
function_name("This is test number: " + std::to_string(i));
는 지어다의 처음에 표현 당신은 운영자 +의 두 피연산자를 포함 할 새로운 문자열을 얻으려면
"This is test number: " + i
을 고려하십시오. 따라서이 문자열은 메모리에 동적으로 할당되어야합니다. 문자열에 메모리를 동적으로 할당하는 유일한 표준 C++ 클래스는 std::string
입니다. 그러나 피연산자 중 하나가 정수형 인 경우에는 operator +
이 없습니다. 따라서 객체 i는 명시 적으로 std :: string 유형의 객체로 변환되어야합니다. 그것은
function_name("This is test number: " + std::to_string(i));
그러나 함수 유형 char *
의 인수 다음 클래스 std::string
를 사용할 수 없습니다를 받아들이는 것처럼 호출이 보일 것이다이 경우 표준 기능 std::to_string
를 사용하여 수행 할 수 있습니다.
그래서 무엇이 필요합니까?
앞서 언급했듯이 함수를 호출하기 전에 문자 배열 자체를 할당해야합니다. 문자열 리터럴과 i에 저장된 숫자를 수용 할 수있는 배열을 정의했다고 가정 해 봅시다. 당신이
std::sprintf(s, "&s %i", "This is test number: ", i);
function_name(s);
당신은 동적 배열을 할당 할 수 쓸 수
char s[SOME_ENOUGH_SIZE];
. 예를 들어
char *s = new char[SOME_ENOUGH_SIZE];
위와 같은 방식으로 함수를 호출하십시오.
감사합니다. 훌륭하게 작동합니다. 모든 사람들에게 감사드립니다. – jond000e
@Deduplicator 그는 매개 변수의 형식이 char *이고 c_str()의 반환 형식이 const char *이기 때문에이 작업을 수행하지 않을 수 있습니다. –
@Deduplicator 나는 c_str()의 리턴 타입이 const char * 인 반면 매개 변수의 타입은 char * 인 것을 반복한다. 정의되지 않은 동작을 사용하도록 제안합니다. –
가 function_name
가 std::string
인수를 취한다고 가정들 감사, 당신은 C++ 11 지원을 그 많은 요소에 의해 이동 된 배열을 생성합니다 (이 경우 기본 주소가 경계에 유지된다고 가정하면 가비지 데이터가 생성됩니다).
따라서 i=4
인 경우 문자열은 " is test number: "
으로 전달되고 "This"
은 삭제됩니다.
function_name("This is test number: " + std::to_string(i));
편집 : 당신이 표준 : : 문자열을 사용하여 위의 해결책 사용할 수있는 문자열을 연결하려는 경우
그래서, 당신은 i
논평했기 때문에하지 int
그래서이 더 이상 유효 할 수있다.
사용할 수 있습니다
당신에게
아래에 귀하의 의견을 말합니다 : 나는 그것을 호출하려고 해요 : Send ("Some text"+ var) var가 char * 일 때. 위의'i'는'char * '가되어야할까요? 두 개의 문자열을 연결하려고합니까? 또는 정수형을 문자열로 변환하고이 두 문자열을 연결하십시오.대부분의 사람들은 변수 네이밍을 선택한 후자를 가정합니다. – Praetorian
호출하려는 함수의 프로토 타입과 질문에 연결하려는 값의 유형을 추가해야합니다. – Deduplicator