2014-03-30 3 views
-4

저는 C 언어를 처음 사용하며 클래스 프로젝트 용 문자 배열을 선언하는 데 어려움이 있습니다.C- 문자 배열 선언

char test[]="Test\0"; 

char *Pointer; 
Pointer=test; 

나는 다음 인수로 포인터를받는 함수 printString(char* chars) 있습니다 는 여기에 내가 뭘하는지 대략입니다. 컴파일하려고하면 테스트 나 포인터가 선언되지 않는다고 들었습니다. 나는 왜 그런지, 누군가가 올바른 방향으로 나를 가리킬 수 있는지 모르겠습니다.

main() 
{ 

    char *test2="Test\0"; 

    printString(test2); 
} 

printString(char* charArray) 
{ 

    int charPos=0; 
    int endOfString=1; 

    char al; 
    char ah; 
    int ax; 

    while(endOfString==1) 
    { 
      al=charArray[charPos]; 
      ah=0xE; 
      ax=ah*256+al; 

      interrupt(0x10,ax,0,0,0); 


      if(al=='\0') 
      { 
        return 0; 
      } 

      charPos++; 
    } 
} 
+3

당신이 당신의 전체 코드를 게시 할 수 있습니까? – McLovin

+3

BTW, null 종결자를 문자열 리터럴에 추가 할 필요가 없습니다. 그것은 당신을 위해 이루어집니다. –

+1

이'Pointer = &test;'을 사용해보십시오. '&'변수의 주소를 얻을 수 있습니다. – Biduleohm

답변

0

함수를 사용하는 경우 :

이 전체 코드입니다 printString (문자 * 문자).

는 선언 : 모든

char *my_string = "Test"; 
printString(my_string); 
+0

이렇게하면"유효하지 않은 lvalue "와"my_string이 undelcared "라고 표시됩니다. – Evando

+0

이상한 , 여기에 전체 코드를 게시하십시오 – Ayoros

0

첫째, NULL 문자를 가진 것은이 필요하지 않습니다. 여기

는 이유 :

문자의 배열이 선언되고, 그것은 당신의 예처럼, 초기화 할 때 :

char test[] = "Test"; 

컴파일러는 테스트 배열에 "테스트"에서 문자를 넣어 것입니다 귀하의 질문에 관해서

+---+---+---+---+----+ 
test| T | e | s | t | \0 | 
    +---+---+---+---+----+ 

이 도움이된다면 참조 : 그 시험이 너무 같은 문자열로 사용할 수 있도록, 다음에 널 문자를 추가

void print_string(char *p) { 
    while (*p != '\0') { 
    printf("%c", *p); 
    p++; 
    } 

} 

C 스타일 문자열은 일련의 문자이며 항상 NULL 문자로 끝납니다.

예를 들어 "print_string"함수는 char에 대한 포인터를 인자로 가질 것을 기대합니다. 여러분이 만든 char 배열을 지나칠 수 있습니다. 배열은 포인터로 취급되기 때문에 작동합니다. 이 함수는 각각 문자가 NULL 문자가 발생할 때까지. 중요

: 배열 버전

char test[] = "Test"; 
char *test_2 = "Test"; 

은 시험에 저장된 문자는 임의의 배열 요소를 수정할 수있다. 포인터 버전에서 테스트는 문자열 리터럴을 가리키며 문자열 리터럴은 수정하면 안됩니다.

나는 그 문제가있을 수 있다고 생각하는데, 문자열 리터럴을 수정하려고합니다. 그렇게하면 정의되지 않은 동작이 발생합니다.

배열을 사용하거나 메모리를 할당하고 char 포인터가이를 가리 키도록하십시오.

+0

내 코드를 편집 해 주셔서 감사합니다. Turbo J. 여기에 코드를 쓰는 대신 test.c 파일에서 직접 복사해야합니다. 여기에 코드를 작성하는 방법은 여전히 ​​배우고 있습니다. –

0

문제는 입니다. 사용하기 전에 함수를 선언하지 않았으므로 문제가 있습니다. C에서 사용되기 전에 모든 것을 선언해야합니다. 이 경우 예를 들어

void printString(char* charArray); 

int main(void) 
{ 
    ... 
} 

void printString(char* charArray) 
{ 
    ... 
} 
+0

아, 감사합니다. 초심자 실수는 내 부분에 – Evando

0

죄송합니다.롤 인쇄

main() 
    { 

     char *test2="Test\0"; 

     printString(test2); 
    } 

    printString(char* charArray) 
    { 

     int charPos=0; 
     int endOfString=1; 

     char al; 
     char ah; 
     int ax; 

     while(endOfString==1) 
     { 
       al=charArray[charPos]; 
       ah=0xE; 
       ax=ah*256+al; 

       interrupt(0x10,ax,0,0,0); 


       if(al=='\0') 
       { 
         return 0; 
       } 

       charPos++; 
     } 
    } 

문자열, 단지를 사용

#include <stdio.h> 
int main(void) 
{ 
    char *my_string = "Test"; 

    printf("%s", my_string); 
    return (0); 
}