Как сделать функцию return char в программировании на c?

Я пытаюсь выполнить простое программирование на c, которое вернет значение char. Программа работает без ошибок, но ожидаемая строка не выводится. Я ожидал, что при запуске он вернет Halloworld.

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

char screen(char c[]);

int main(){

    char b[] = "Hallo";
    //screen(b);
    printf("%s",screen(b));
}

char screen(char c[]){

    strcat(c, "world");
    return c;
}

Эта программа вообще компилируется? Похоже, вы пытаетесь выполнить неявное преобразование из char[] в char, и я ожидал бы от этого ошибки времени компиляции.

Daniel Pryden 03.09.2018 02:14

Что еще более важно: b - это постоянный объект без достаточного места для добавления к нему дополнительных данных, что означает, что эта программа - неопределенное поведение, и может произойти все, что угодно, в том числе вообще ничего.

Daniel Pryden 03.09.2018 02:16

да, программа скомпилирована, но она дает предупреждение, подобное этому, в предупреждении функции экрана: return делает целое число из указателя без приведения [-Wint-conversion]

Wan Afifi Wan Zain 03.09.2018 02:17

Это очень важное предупреждение! (И вам, вероятно, следует компилировать с помощью -Wall -Werror или другого эквивалента в вашем компиляторе: не игнорируйте подобное предупреждение компилятора.) Если вы не понимаете этого предупреждения, то это хороший вопрос сам по себе (но я Я почти уверен, что об этом уже где-то спросили и на него подробно ответили).

Daniel Pryden 03.09.2018 02:24

@WanAfifiWanZain, отвечает ли мой ответ на ваш вопрос? Не стесняйтесь задавать больше вопросов.

Andy J 03.09.2018 04:47
char означает одиночный символ
M.M 03.09.2018 04:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
13 372
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объявление strcat() возвращает указатель на char (char *). Так что ваша функция screen() тоже должна.

Другое дело, что вы не можете сделать этот char b[] = "Hallo";, потому что тогда символьный массив b будет достаточно большим, чтобы обрабатывать Hallo. Он вам понадобится больше, чем Hallo, а остальные будут заполнены 0x00 или NUL. Вот так:

48 61 6C 6C 6F 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00

И затем после того, как вы strcat(), символы world в конце:

48 61 6C 6C 6F 20 77 6F 72 6C 64 00 00 00 00 00 00 00 00 00

Первый оставшийся 0x00 будет действовать как нулевой терминатор при передаче в printf().

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

char* screen(char c[])
{
    strcat(c, "world");
    return c;
}

int main()
{
    char b[20] = "Hallo ";
    screen(b);
    printf("%s",b);

    return 0;
}

могу я узнать, почему мы должны поместить указатель на функцию? в то время как 'int function' или 'float function' прекрасно подойдут без использования указателя на функцию.

Wan Afifi Wan Zain 03.09.2018 02:12

@Wan: Потому что int - это просто int, а строка (массив символов) - это больше, чем просто char. Соглашение в C заключается в использовании указателя на первый символ строки для представления строки.

Daniel Pryden 03.09.2018 02:20

Другие вопросы по теме