SPOJ (PL)에서 StringMerge (PP0504B) 문제를 해결하려고합니다. 근본적으로 문제는 문자 배열에서 생성 된 문자열을 가진 문자 배열에 대한 포인터를 반환하는 함수 string_merge(char *a, char *b)
을 작성하는 것입니다 (배열의 길이는 인수로 제공된 더 짧은 배열의 길이입니다).C에서 동적 배열 조작
내가 만든 프로그램은 테스트 케이스에서는 잘 작동하지만 SPOJ의 판사에게 게시하면 실패합니다. 내가 여기에 내 코드를 게시하고 있는데, 문제는 메모리 할당과 관련이 있다고 믿는다. (나는 여전히 C의이 부분을 배우고있다.) - 내 코드를 살펴볼 수 있겠는가?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#define T_SIZE 1001
char* string_merge(char *a, char *b);
char* string_merge(char *a, char *b) {
int alen = strlen(a); int blen = strlen(b);
int len = (alen <= blen) ? alen : blen;
int i,j;
char *new_array = malloc (sizeof (char) * (len));
new_array[len] = '\0';
for(j=0,i=0;i<len;i++) {
new_array[j++] = a[i];
new_array[j++] = b[i];
}
return new_array;
}
int main() {
int n,c; scanf("%d", &n);
char word_a[T_SIZE];
char word_b[T_SIZE];
while(n--) {
scanf("%s %s", word_a, word_b);
char *x = string_merge(word_a, word_b);
printf("%s",x);
printf("\n");
memset(word_a, 0, T_SIZE);
memset(word_b, 0, T_SIZE);
memset(x,0,T_SIZE);
}
return 0;
}
참고 : -std=c99
플래그로 컴파일 중입니다.
'ElectricFence'또는 'valgrind'로 시도해보십시오. –