Я пытаюсь решить проблему с 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'. –