没有输出是为什么?

Getting no output why is that?

我',正在学习 C,但由于某种原因我没有得到任何输出,可能我没有 return 我应该做的,但我应该怎么做? (在下面的评论中描述了问题:D) 感谢您的帮助!

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

char *makeUpperCase (char *string);

int main()
{
    printf(makeUpperCase("hello")); //Here there is no output, and when I'm trying with the format %s it returns null
    return 0;
}

char *makeUpperCase(char *string)
{
    char str_out[strlen(string) + 1];
    for (int i = 0; i < strlen(string); ++i)
        str_out[i] = toupper(string[i]);

    printf(str_out); //Here I get the output.
    return str_out;
}

您在函数中声明了一个局部变长数组,该数组在退出函数后将不再存在

char str_out[strlen(string) + 1];

所以你的程序有未定义的行为。

如果函数参数声明时没有限定符 const 那么这意味着函数会更改传递的字符串。这样的函数可以这样定义

char * makeUpperCase( char *string )
{
    for ( char *p = string; *p != '[=11=]'; ++p )
    {
        *p = toupper( ( unsigned char )*p );
    }

    return string;
}

否则你需要动态分配一个新的字符串。例如

char * makeUpperCase( const char *string )
{
    char *str_out = malloc( strlen( string ) + 1 );

    if ( str_out != NULL )
    { 
        char *p = str_out;

        for ( ; *string != '[=12=]'; ++string )
        {
            *p++ = toupper( ( unsigned char )*string );
        }

        *p = '[=12=]';
    }

    return str_out;
}

这是一个演示程序。

#include <stdop.h>
#include <stdlib.h>
#include <string.h>

char *makeUpperCase( const char *string )
{
    char *str_out = malloc( strlen( string ) + 1 );

    if (str_out != NULL)
    {
        char *p = str_out;

        for (; *string != '[=13=]'; ++string)
        {
            *p++ = toupper( ( unsigned char )*string );
        }

        *p = '[=13=]';
    }

    return str_out;
}

int main( void )
{
    char *p = makeUpperCase( "hello" );

    puts( p );

    free( p );
}

程序输出为

HELLO

问题是 printf() 是基于一种有点复杂的机制来缓冲输出。当您输出到终端时,printf() 只是缓冲所有内容,直到缓冲区填满(仅字符串 "hello" 不会发生这种情况,或者直到它接收到 '\n' 字符(这你没有在你的陈述中使用)

因此,要强制刷新缓冲区,只需添加以下语句

    fflush(stdout);

在你的 printf() 电话之后。