2017-12-25 18 views
-2

문제가있어서 그 이유를 알 수 없습니다. main에서 2 개의 문자열 배열을 만듭니다. 함수가 다음의 요구 사항에 따라 2 문자열을 수용하고 적절한 크기의 새로운 배열을 작성 어레이 (1) : 아비브 어레이 (2) : 12 새로운 배열 예 : a12v12i12v 새로운 배열 정확히 있어야 크기! 그런 다음 새 배열을 main 및 main에 보내 인쇄하십시오. 나는 또한 정크 값을 출력한다. 새 배열의 크기를 확인했는데 올바른 크기입니다. 내 코드 : 어느 문자열 str1이나 문자열 str2 함수 변경되기 때문에정크 값으로 인쇄하십시오.

char* CreateString(char* str1, char* str2) 
    { 
     int length1, length2, length3 = 0; 
     int i,j, index_help = 0; 
     char *str3 = NULL; 
     length1 = strlen(str1); 
     length2 = strlen(str2); 
     for (i = 0; i < length1; i++) // Check the size of the new array 

     { 
      length3++; 
      if (i == (length1 - 1)) 
      { 
       break; 
      } 
      for (j = 0; j < length2; j++) 
      { 
       length3++; 
      } 
     } 
     str3 = (char*)malloc(length3+1 * sizeof(char)); 
     if (str3 == NULL) 
     { 
      printf("There is not enough memory space\n"); 
      return 0; 
     } 
     for (i = 0; i < length1; i++) //Copying data 

     { 

      str3[index_help] = str1[i]; 
      if (i == (length1 - 1)) 
      { 
       break; 
      } 
      for (j = 0; j < length2; j++) 
      { 
       index_help++; 
       str3[index_help] = str2[j]; 
      } 
      index_help++; 

     } 
     return str3; 
    } 

    int main() 
    { 
     char *str1 = NULL, *str2 = NULL,*str4=NULL; 
     int size1, size2,i; 
     printf("enter the size of string number 1:\n"); 
     scanf("%d", &size1); 
     printf("enter the size of string number2 :\n"); 
     scanf("%d", &size2); 
     str1 = (char*)malloc((size1 + 1) * sizeof(char)); 
     if (str1 == NULL) 
     { 
      printf("There is not enough memory space\n"); 
      return 0; 
     } 
     str2 = (char*)malloc((size2 + 1) * sizeof(char)); 
     if (str2 == NULL) 
     { 
      printf("There is not enough memory space\n"); 
      return 0; 
     } 
     printf("Enter a value for the first string (the size is:%d):\n", size1); 
     scanf("%s", str1); 
     printf("Enter a value for the second string (the size is:%d):\n", size2); 
     scanf("%s", str2); 
     str4 = CreateString(str1, str2); 
printf("%s",str4); 
     printf("\n"); 
     return 0; 
    } 
+1

'(I = 0; I <길이 1] 나가 ++)'- 제'for' 루프 - 여기서 논리는 무엇입니까? 루프를 수행하지 않고도 수행 할 수 있습니다. –

+1

문자열 배열을 볼 수 없습니다. –

+3

문자열 끝에 정크 문자가 있습니다. 문자열을 종료하는 것을 잊어 버린 채로 죽은 공짜입니다. –

답변

0

기능은

char* CreateString(const char* str1, const char* str2); 

과 같이 선언한다.

종료 문자열이 0 인 결과 문자열을 추가해야합니다.

결과 문자열의 길이는 루프를 사용하지 않고보다 간단하게 계산할 수 있습니다. 함수로서 strlen

다음과 같은 유형 int 대신 size_t 형을 갖는 것으로 선언되어야하는 함수 호출의 결과를 받아 변수 반환형 size_t있다.

이 기능은 데모 프로그램에서 보여 지듯이 다음과 같이 구현할 수 있습니다.

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

char * CreateString(const char *s1, const char *s2) 
{ 
    size_t n1 = strlen(s1); 
    size_t n2 = strlen(s2); 

    size_t n3 = n1 == 0 ? 0 : n1 + (n1 - 1) * n2; 

    char *s3 = (char *)malloc(n3 + 1); 

    if (s3) 
    { 
     if (n2 == 0) 
     { 
      strcpy(s3, s1); 
     } 
     else 
     { 
      char *p = s3; 

      while (*s1) 
      { 
       *p++ = *s1++; 
       if (*s1) 
       { 
        strcpy(p, s2); 
        p += n2; 
       } 
      } 

      *p = '\0'; 
     } 
    } 

    return s3; 
} 

int main(void) 
{ 
    char *p = CreateString("aviv", "12"); 

    printf("\"%s\"\n", p); 

    free(p); 

    p = CreateString("", "12"); 

    printf("\"%s\"\n", p); 

    free(p); 

    p = CreateString("a", "12"); 

    printf("\"%s\"\n", p); 

    free(p); 

    p = CreateString("av", "12"); 

    printf("\"%s\"\n", p); 

    free(p); 

    p = CreateString("av", ""); 

    printf("\"%s\"\n", p); 

    free(p); 

    return 0; 
} 

프로그램 출력이기

"a12v12i12v" 
"" 
"a" 
"a12v" 
"av"