포인터와 문자열 사이의 접촉

0 일반적인 실수

  1. 없음 언어 문자열 데이터 형베이스 C

    C 언어가있다 <string.h>그래서 우리는 C 언어는 이런 문자열을 가지고 부여,이 헤더 파일을 문자열 변수는 다음의 형태로 선언하는 string aString; 컴파일에 실패 . 원래 C 언어들이있다 하지 문자열 이 입력되므로 문자열 숯불에 의해 배열되어 저장 및 <string.h>의 전체 또한이 헤더 파일 선언 함수 원형 문자 배열에 동작 온갖 . 는 C ++ 문자열 클래스 등장까지 (I 클래스가 아닌 형태를 의미한다).

  2. 문자열은 문자의 배열에 의해 정의되는 경우, 기본은 마지막 배열의 요소를 더한 '\ 0'의 끝을 표시 할 것

  3. 문자 배열은 보통 문자열 참조 구별하는 경우에는 다음과 같은 코드로 제 점이 지정된

//此string1后面不会有'\0'标志,就是一般的字符数组
char string1[3]={'a','b','c'};

//string2为字符串形式,结尾有\0标志,长度为4
char string2[4]="abc"    

참고 : 여기에 문자열 2의 길이가 제한 될 수 있으며, 기본값은 생략 컴파일러를 자동으로 필요한 인위적으로 설정 한 길이 경우 필요 계정 '\ 0'문자를 고려하기 위해, 길이를 설정합니다

문자 배열의 길이가 충분하지 않으면, 컴파일러 오류

D : \ otherworkspace \ devcppworkspace \ DS \ DS-C2 \ demo5.cpp [오류] 문자의 배열 초기화 문자열이 너무 긴 [-fpermissive]

  1. 관계 배열 이름과 포인터

    다음 샘플 코드는 다음과 같습니다

    #include<stdio.h>
    
    int main(){
     int i;
     char string[]="abc";
     for(i = 0;i<4;i++){
         printf("%p\t",string+i);    
         printf("%p\t",&string[i]);
         printf("%c\n",string[i]);
     }
     return 0;
    } 

    인쇄 결과

    000000000062FE10        000000000062FE10        a
    000000000062FE11        000000000062FE11        b
    000000000062FE12        000000000062FE12        c
    000000000062FE13        000000000062FE13

    뷰의 코드 포인트를 실행 한 결과에 의하면, 문자열 [], 자동 포인터의 종류에 따라 배열 이름 [0]이, 우리가 직접 산술 포인터 수 실제로 인덱스의 첫번째 요소를 가리키는 포인터이다 운동의 길이에 해당하는, 예를 들어, 여기에 문자 포인터, 1 바이트, 다음 문자열 ++, 커서가 자동으로 바이트를 다시 이동합니다.

문자열 1.0 읽기

#include <stdio.h>
int main()
{
    char name[20];
    printf("Enter name: ");
    scanf("%s", name);
    printf("Your name is %s.", name);
    return 0;
}

결과 :

Enter name: Dennis Ritchie
Your name is Dennis.

scanf()기능이 문자 순서를 읽고, 공백 (공백, 줄 바꿈, 탭 등)에 직면했을 때 읽기 중지합니다.

그래서 당신은 어떻게 읽을 수 있습니까?

#include <stdio.h>
int main()
{
    char name[30];
    printf("Enter name: ");
    fgets(name, sizeof(name), stdin);  // read string
    printf("Name: ");
    puts(name);    // display string
    return 0;
}

수출

Enter name: Tom Hanks
Name: Tom Hanks

여기서는 단말기로부터 문자열을 읽을 수는 fgets () 함수를 사용한다. 는 fgets (표준 입력 이름를 sizeof (명)) 결과를 sizeof (이름) (30)이다. 따라서, 우리는 즉 입력,로 30 자까지 입력 할 수 있습니다, 이름 문자열의 크기는 다른 길이로 지정할 수 있습니다. 문자열을 인쇄하기 위해, 우리는, 당신은 또한 직접의 printf () 함수 인쇄를 사용할 수있는 풋 (이름)을 사용합니다.

참고 : 도착 () 함수는 사용자 입력을받을 수 있습니다. 그러나, C 표준에서 제거되었습니다. 이 가져 오기 때문에 () 길이의 문자를 입력 할 수 있습니다. 따라서, 버퍼 오버 플로우가 존재할 수있다.

1.1 가져 오기 문자열 길이

샘플 코드

//求字符串长度 
#include <string.h>
#include <stdio.h>
 
int main(void)
{
    const char str[] = "How many characters does this string contain?";
 
    printf("without null character: %zu\n", strlen(str));
    printf("with null character:    %zu\n", sizeof(str) );
    return 0; 
}

산출

without null character: 45
with null character:    46

추천

출처www.cnblogs.com/ericling/p/11761031.html