Я пытаюсь выполнить простое программирование на 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;
}
Что еще более важно: b - это постоянный объект без достаточного места для добавления к нему дополнительных данных, что означает, что эта программа - неопределенное поведение, и может произойти все, что угодно, в том числе вообще ничего.
да, программа скомпилирована, но она дает предупреждение, подобное этому, в предупреждении функции экрана: return делает целое число из указателя без приведения [-Wint-conversion]
Это очень важное предупреждение! (И вам, вероятно, следует компилировать с помощью -Wall -Werror или другого эквивалента в вашем компиляторе: не игнорируйте подобное предупреждение компилятора.) Если вы не понимаете этого предупреждения, то это хороший вопрос сам по себе (но я Я почти уверен, что об этом уже где-то спросили и на него подробно ответили).
@WanAfifiWanZain, отвечает ли мой ответ на ваш вопрос? Не стесняйтесь задавать больше вопросов.
char означает одиночный символ





Объявление 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: Потому что int - это просто int, а строка (массив символов) - это больше, чем просто char. Соглашение в C заключается в использовании указателя на первый символ строки для представления строки.
Эта программа вообще компилируется? Похоже, вы пытаетесь выполнить неявное преобразование из
char[]вchar, и я ожидал бы от этого ошибки времени компиляции.