2013-04-19 3 views
1

내가 프로그래밍에 새로운 오전이 특정 문제에 직면 한 문자열 :액세스 문자열의 문자는

int *FindLine(char *lines[100],int line_number) { 
    char **pointer=lines; 
    int i,*stack,counter=0; 
    stack=(int*)calloc(30,sizeof(int)); 
    for (i=0;i<line_number;i++) 
    if (*pointer[i]=='{') { 
     stack[counter]=i+1; 
     counter++; 
    } 
    return stack; 
} 

main(){ 
    char *line[100]; 
    FILE *fp; 
    char FileName[20]; 
    char Buffer[100]; 
    fp=fopen(FileName,"r"); 

    while(fgets(Buffer,100,fp)!=NULL) {   
    line[i]=strdup(Buffer);      
    i++; 
    }    
    NumOfLines=i; 
    Stack=FindLine(line,NumOfLines); 
    system("PAUSE"); 
} 

스택은 각 행의 수를 저장 한 것으로 추정된다 '{'대신에 나타납니다 '{'가 줄의 첫 번째 문자 인 경우에만 저장합니다. 문자열에 대한 포인터의 배열에있는 포인터가 가리키는 문자열의 모든 개별 문자에 액세스하는 C 방법이 있습니까?

+0

'calloc' 대신'malloc'을 사용하십시오. calloc이 스택 (함수 범위 메모리)에 메모리를 할당하지 않았습니까? 따라서 외부로 반환 할 수 없습니다. –

+0

@JoopEggen - 아니요. 'calloc'은 스택에서 메모리를 할당하지 않습니다. 힙에서 할당합니다. – user93353

답변

2

변경

if (*pointer[i]=='{') 

if (!strchr(pointer[i],'{')) 

에 당신은 처음에

#include <string.h> 

를 추가해야 할 수도 있습니다.

pointer[i]은 문자열 (문자 배열)을 가리 킵니다. *pointer[i]은 문자열의 첫 번째 문자를 제공합니다. 그래서 if 조건은 첫 번째 문자 만 검사합니다. '{'문자가 어디 문자열이있는 경우

그래서 당신은 strchr

strchr과 검사를 사용해야합니다. 발견되면 첫 번째 발생 포인터를 반환하거나 찾을 수없는 경우 0/NULL을 반환합니다.

관련 문제