C++CHAR 배열 에 문자열 값 을 부여 합 니 다.

10712 단어 C++문자열CHAR
긴 말 안 할 게 요.그냥 코드 보 세 요~

CHAR name[50];
strcpy(name, "tagname");
추가:char*값 을 std:string 에 부여 하 는 함정
그 동안 항상 char 나 char*를 사용 하여 std:string 에 값 을 부여 해 야 합 니 다.많은 구 덩이 를 밟 았 습 니 다.그래서 테스트 코드 를 썼 습 니 다.제 코드 를 보고 싶 지 않 으 면 아래로 뛰 어 내 려 서 정 리 를 직접 볼 수 있 습 니 다.

#include <string>
#include <iostream> 
using namespace std; 
int main(int argc, char* argv[])
{
  string str1;
  cout << "str1:" << str1 << " length: " << str1.length() << " size: " << str1.size() << " capacity: " << str1.capacity() << endl;
 
  string str2("hello");
  cout << "str2:" << str2 << " length: " << str2.length() << " size: " << str2.size() << " capacity: " << str2.capacity() << endl;
 
  string str3(4, 'A');
  cout << "str3:" << str3 << " length: " << str3.length() << " size: " << str3.size() << " capacity: " << str3.capacity() << endl;
 
  string str4(str2);
  cout << "str4:" << str4 << " length: " << str4.length() << " size: " << str4.size() << " capacity: " << str4.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  char sz1[10] = { 0 };
  sz1[0] = 'a';
  sz1[1] = 'b';
  sz1[2] = 'c';
  char sz2[10] = { 0 };
  sz2[0] = 'a';
  sz2[3] = 'b';
  sz2[4] = 'c';
 
  string str5(sz1);
  string str6(sz1, 2);
  string str71(sz1, 4);
  string str72(sz1, 10);
  string str73(sz1, 30);
 
  cout << "str5:" << str5 << " length: " << str5.length() << " size: " << str5.size() << " capacity: " << str5.capacity() << endl;
  cout << "str6:" << str6 <<" length: " << str6.length() << " size: " << str6.size() << " capacity: " << str6.capacity() << endl;
  cout << "str71:" << str71 << " length: " << str71.length() << " size: " << str71.size() << " capacity: " << str71.capacity() << endl;
  cout << "str72:" << str72 << " length: " << str72.length() << " size: " << str72.size() << " capacity: " << str72.capacity() << endl;
  cout << "str73:" << str73 << " length: " << str73.length() << " size: " << str73.size() << " capacity: " << str73.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str8(sz2);
  string str9(sz2, 1);
  string str10(sz2, 2);
  string str11(sz2, 4);
  string str12(sz2, 10);
 
  cout << "str8:" << str8 <<" length: " << str8.length() << " size: " << str8.size() << " capacity: " << str8.capacity() << endl;
  cout << "str9:" << str9 << " length: " << str9.length() << " size: " << str9.size() << " capacity: " << str9.capacity() << endl;
  cout << "str10:" << str10 << " length: " << str10.length() << " size: " << str10.size() << " capacity: " << str10.capacity() << endl;
  cout << "str11:" << str11 << " length: " << str11.length() << " size: " << str11.size() << " capacity: " << str11.capacity() << endl;
  cout << "str12:" << str12 << " length: " << str12.length() << " size: " << str12.size() << " capacity: " << str12.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str13 = sz1;
  string str14 = sz2;
  cout << "str13:" << str13 << " length: " << str13.length() << " size: " << str13.size() << " capacity: " << str13.capacity() << endl;
  cout << "str14:" << str14 << " length: " << str14.length() << " size: " << str14.size() << " capacity: " << str14.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str15;
  str15.append(sz1);
  string str16;
  str16.append(sz1, 2);
  cout << "str15:" << str15 << " length: " << str15.length() << " size: " << str15.size() << " capacity: " << str15.capacity() << endl;
  cout << "str16:" << str16 << " length: " << str16.length() << " size: " << str16.size() << " capacity: " << str16.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str17;
  str17.append(sz2);
  string str18;
  str18.append(sz2, 3);
  string str19;
  str19.append(sz2, 10);
  cout << "str17:" << str17 << " length: " << str17.length() << " size: " << str17.size() << " capacity: " << str17.capacity() << endl;
  cout << "str18:" << str18 << " length: " << str18.length() << " size: " << str18.size() << " capacity: " << str18.capacity() << endl;
  cout << "str19:" << str19 << " length: " << str19.length() << " size: " << str19.size() << " capacity: " << str19.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str20;
  str20 += sz1;
  string str21;
  str21 += sz2;
  cout << "str20:" << str20 << " length: " << str20.length() << " size: " << str20.size() << " capacity: " << str20.capacity() << endl;
  cout << "str21:" << str21 << " length: " << str21.length() << " size: " << str21.size() << " capacity: " << str21.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str22;
  str22.assign(sz1);
  string str23;
  str23.assign(sz1, 9);
  string str24;
  str24.assign(sz1, 15);
  cout << "str22:" << str22 << " length: " << str22.length() << " size: " << str22.size() << " capacity: " << str22.capacity() << endl;
  cout << "str23:" << str23 << " length: " << str23.length() << " size: " << str23.size() << " capacity: " << str23.capacity() << endl;
  cout << "str24:" << str24 << " length: " << str24.length() << " size: " << str24.size() << " capacity: " << str24.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  string str25;
  str25.assign(sz2);
  string str26;
  str26.assign(sz2, 4);
  string str27;
  str27.assign(sz1, 15);
  cout << "str25:" << str25 << " length: " << str25.length() << " size: " << str25.size() << " capacity: " << str25.capacity() << endl;
  cout << "str26:" << str26 << " length: " << str26.length() << " size: " << str26.size() << " capacity: " << str26.capacity() << endl;
  cout << "str27:" << str27 << " length: " << str27.length() << " size: " << str27.size() << " capacity: " << str27.capacity() << endl;
 
  cout << "-----------------------------------------------" << endl;
 
  printf("%s
", str26.c_str()); printf("%s
", str26.data()); return 0; }
출력 결 과 는:

현재 총 결 은 다음 과 같다.
1.char*를 std::string 에 할당 합 니 다.길 이 를 지정 하지 않 으 면 기본적으로\\0 으로 절단 합 니 다(ASCII 코드 값 은 0).지정 한 길이 가 char*문자열 의 길 이 를 초과 하면 std:cout 시리즈 의 함수 로 출력 할 때 이 char*에 속 하지 않 는 메모리 값 을 출력 합 니 다.printf 시리즈 의 함수 에 대해 std::string 을 인쇄 할 때\0 을 만 나 도 절단 되 기 때문에 완전히 표시 할 수 없습니다.이 점 은 로그 에 인쇄 하거나 출력 할 때 특히 주의해 야 합 니 다.
2.하나의 문자 와 하나의 문자열 이 std:string 쓰기 에 값 을 부여 한다 면 차이 가 있 습 니 다.char 에 대해 서 는 숫자 가 첫 번 째 매개 변수 이 고 char*수 는 두 번 째 매개 변수 입 니 다.
예 를 들 어 ptsr 가 문자열 이나 문자 라 고 가정 합 니 다.pstr 가 문자열 이 라면 string(pstr,n)이 라 고 써 야 합 니 다.pstr 가 문자 라면 string(n,pstr)이 라 고 써 야 합 니 다.이때 string(pstr,n)은 잘못된 쓰기 입 니 다.프로그램 에 이상 한 문제 가 생 길 수 있 습 니 다.pstr 가 마이너스 라면 음 수 를 부호 없 는 정수 size 로 변환 하기 때 문 입 니 다.t 형식,n 은 매우 커서 문자열 을 구성 할 때 length 가 매우 커서 std::string 구조 시 이상 을 던 질 수 있 습 니 다.이 두 가지 초기 화 된 구조 함수 서명 을 보십시오.

string (const char* s, size_t n);
string(size_t n, char c);
이 차이 점 에 주의 하 세 요!!당연하게 잘못 쓰기 쉽다.pstr 가 대응 하 는 수치 가 비교적 작은 정수 라면 이상 이 발생 하지 않 을 수 있 지만 프로그램 상태 도 원 하 는 것 이 아 닙 니 다.만약 음수 라면 프로그램 에 직접 이상 이 생 길 것 이다.던 지기:std::lengtherror 。그래서 이 이상 한 정보 가 나 오 면 std:string 의 길이 정 보 를 초기 화 하 는 지 잘 확인 해 야 합 니 다.

좋은 웹페이지 즐겨찾기