2014-04-14 2 views
0

먼저이 인스턴스에서 malloc을 사용하는 것이 좋지 않습니다. 나는 당신은 당신의 함수에서 루프 본체와의 malloc을 변경해야문자열이 아무것도 표시되지 않습니다

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


//function to remove n number of characters from replicated string 
char* remove_beginning(int n, char a[], int size) 
{ 

int i; 
char *p=malloc(size-(1+n)); 
for(i = n ;i < size-1; i++) 
    { 
    p[i] = a[i]; 
    } 

return p; 

} 



int main(){ 


char *str = "123456789"; 
char *second = remove_beginning(5, str, strlen(str)); 

printf("%s\n", second); 
return 0; 

} 
+0

어떤 방식으로 작동하지 않습니까? –

+0

아무것도 인쇄하지 않습니다 – Stumbler

+3

나는 p [i]가 p [i-n]이어야한다고 생각합니다. 또한 마지막에 null을 잊지 마십시오. – imran

답변

2

p는 [내가] [에] P해야하며, 사용자는 널 복사해야합니다

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


//function to remove n number of characters from replicated string 
char* remove_beginning(int n, char a[], int size) { 
    int i; 
    char *p=malloc(size-(n-1)); 
    for(i = n ;i <= size; i++) { 
    p[i-n] = a[i]; 
    } 

    return p; 
} 


int main(){ 
    char *str = "123456789"; 
    char *second = remove_beginning(5, str, strlen(str)); 

    printf("%s\n", second); 
    return 0; 
} 
+3

코드는 여전히 '0' /'NUL' /''\ 0''/null을 종료 할 때 메모리를 할당하지 못합니다. ** ** 적어도 코드에 대한 들여 쓰기가 적절하게 들여 보내 주시기 바랍니다. – alk

+1

'size- (n-1)'이어야합니다. – haccks

+0

malloc 크기를 수정하기 위해 코드를 편집했습니다 – imran

1

(어떤 컴파일 또는 런타임 오류가없는 논리적으로) 다음 코드가 작동하지 않는 이유에 불과 궁금

char *p=malloc(size-(n-1)); 
for(i = 0 ;i <= size - n; i++) 
{ 
    p[i] = a[i+n]; 
} 
+0

null이 없더라도, (결국 잠재적 인 쓰레기가 있긴하지만) 인쇄하지 말아야합니까? – Stumbler

+0

답변을 편집했습니다. – haccks

+0

이 코드는'n' 요소를'n' 번째부터 복사합니다. 이것은 OP가 갈망하는 것이 아닙니다. – alk

1

문자열의 시작을 제거 또한 strncpy에서 수행 할 수 있습니다 :

char tmp1[20] = "123456789"; 
char tmp2[20]; 
strncpy(tmp2, tmp1 + 5, 4); 

나는 당신의 질문에 직접 대답하지 않는다는 것을 알고 있지만 나는 문자열의 시작을 제거하는 "더 나은"방법을 보여주기 위해 그것을 게시합니다. strncpy은 전체 문자열, 문자열의 시작 또는 끝을 복사하는 데 사용할 수 있습니다.

+0

좋은 답변입니다! 그래도 그렇다. 내가 찾던 사람이 아니야. – Stumbler

관련 문제