【问题标题】:Creating a char function with char parameter in c [duplicate]在c中创建带有char参数的char函数[重复]
【发布时间】:2017-12-11 01:24:46
【问题描述】:

我是学习 c 语言的新手,我正在尝试学习带有 char 数组的函数。在这段代码中,我想编写一个使用 char 数组作为参数并给出另一个 char 数组作为结果的函数。当我运行代码时,输​​出应该是:Helloooo world!

但是,当我运行代码时,程序崩溃了。我该如何解决这个问题?我是否使用了正确类型的变量?

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

char *write();

int main()
{
    char x[10] = "ooo";
    printf("%s, world!\n", *write(x));
    return 0;
}

char *write(char x[10])
{
    char str[10];
    strcpy(str, "Hello");
    strcat(str,x);
    x = str;
    return x;
}

【问题讨论】:

  • 1) x = str; --> strcpy(x, str); 2) *write(x) --> write(x)
  • 你不需要返回数组——直接传入,让write修改它,然后直接在printf中使用x而不是write(x)
  • 我们不是辅导网站。请阅读How to Ask 并说明您认为任何初学者的 C 教科书都没有解决的具体问题。
  • @BLUEPIXY 成功了。非常感谢。
  • @jackarms 成功了。非常感谢。

标签: c arrays function char


【解决方案1】:

你有两个问题:

  1. str 是写函数范围内的局部变量。所以你将指针返回到不再存在的东西。
  2. Str 太短,无法容纳您的数据。您从函数参数中复制“hello”(5 个字符)+ 可能的 10 个字符。

char *write();

int main()
{
    char x[10] = "ooo";
    char buff[20];
    printf("%s, world!\n", write(buff, x, 20));
    return 0;
}

char *write(char *buff, char *s2, int maxsize)
{
    strcpy(buff, "Hello");
    if(strlen(buff) + strlen(s2) < maxsize)
        strcat(buff,s2);
      else 
        strcpy(buff,"Error");
    return buff;
}

【讨论】:

  • *write(...) 错了,应该是write(...)
  • 与其硬编码20,不如使用sizeof(buff)
  • @Barmar - 是的,我在刚刚复制的原始代码中没有注意到这个 *。
  • @Barmar 不幸的是,您不能在函数 write 中使用 sizeof buff,因为它会显示指针本身的大小。如果你的意思是函数调用是 - 但我故意表明我的意思(出于教育目的)
  • @Barmar 你不需要它,因为它是
猜你喜欢
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
相关资源
最近更新 更多