【问题标题】:How to printf char pointer return from function? [duplicate]如何从函数返回 printf char 指针? [复制]
【发布时间】:2021-08-14 18:46:02
【问题描述】:

当我运行代码时,我没有输出并且程序崩溃 有谁知道如何正确打印出 char 指针?

#include <stdio.h>
char *toUpperCase(char *str)
{
    int i = 0;
    while(str[i] != '\0')
    {
        str[i] = str[i] - 32;
        i++;
    }
    return str;
}

int main()
{
     printf("%s", toUpperCase("hello"));
     return 0;
}

【问题讨论】:

  • 您不能写入字符串文字。它们是只读的,所以这是未定义的行为。
  • 另外,请考虑避免使用幻数以使您的意图更加清晰。而while 循环作为for 循环会更好看。此外,当有非字母字符时,此功能无法正常工作:godbolt.org/z/YaYnzn99M

标签: c windows pointers char return-value


【解决方案1】:

禁止修改字符串文字,尝试这样做会调用未定义的行为。您必须改为传递指向可修改缓冲区的指针。

#include <stdio.h>
char *toUpperCase(char *str)
{
    int i = 0;
    while(str[i] != '\0')
    {
        str[i] = str[i] - 32;
        i++;
    }
    return str;
}

int main()
{
     char str[] = "hello";
     printf("%s", toUpperCase(str));
     return 0;
}

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 2016-06-10
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多