Неверный инициализатор: strcat (s, str);в программе C - PullRequest
0 голосов
/ 05 июня 2018

Я пишу программу на хакерранке и пытаюсь объединить две строки, используя функцию strcat(), но она не работает для меня.

Я студент и изучаю язык C, можете ли вы помочь мне найти способдве строки:

Вот мой код:

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

int main() {
    int i = 4;
    double d = 4.0;
    char s[] = "HackerRank ";

    // Declare second integer, double, and String variables.
    int j;
    double e;
    char str[] = "";

    // Read and save an integer, double, and String to your variables.
    scanf("Enter integer : %d",&j);
    scanf("Enter double : %lf",&e);
    scanf("Enter string : %s",str);

    // Print the sum of both integer variables on a new line.
    int sum = i + j;
    printf("\n %d",sum);

    // Print the sum of the double variables on a new line.
    double doubleSum = d + e;
    printf("\n %lf",doubleSum);

    // Concatenate and print the String variables on a new line
    char finalString[] = strcat(s,str);
    printf("%s",finalString);

    // The 's' variable above should be printed first.
    return 0;
}

Ошибка:

solution.c: In function ‘main’:
solution.c:30:26: error: invalid initializer
     char finalString[] = strcat(s,str);
                          ^~~~~~

Ошибка компилятора

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Проверьте ниже код:

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

int main() {
    int i = 4;
    double d = 4.0;
    char s[] = "HackerRank ";
    char *finalString = NULL;
    int j;
    double e;
    char str[100];
    scanf("%d",&j);
    scanf("%lf",&e);
    scanf("%s", &str);
    int sum = i + j;
    printf("\n %d",sum);
    double doubleSum = d + e;
    printf("\n %lf",doubleSum);
    finalString = realloc(finalString, strlen(s) + strlen(str) + sizeof(char));
    strcat(finalString,s);
    printf("\n %s",finalString);    
    strcat(finalString,str);
    printf("\n %s \n",finalString);
   return 0;
}
0 голосов
/ 05 июня 2018

strcat возвращает символ *, который является изменяемым указателем.Его нельзя использовать как инициализацию массива символов, потому что размер не известен во время компиляции.

Следует также отметить, что первым параметром, который вы передаете в strcat, является пункт назначения, который изменяется вызовом и является тем, что возвращается.Для того, чтобы это работало, ваш пункт назначения должен иметь достаточно большой буфер для хранения содержимого объединенной строки.

...