传递数组指针并打印

时间:2015-04-27 23:56:31

标签: c arrays pointers parameters

尽管我努力解决我的问题,每当我编译我的代码时,它会有错误或立即失败。我的目标是在我的'run_program'函数中创建一个字符数组,然后将该数组(作为指针,以便我可以立即返回更改)传递给我的my_str_n_cat函数。不幸的是编码很糟糕,所以我无法打印它。任何帮助将不胜感激。

//Task #1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
char my_str_n_cat (char *source_ptr)
{
    (*source_ptr);
    printf("My Name Is %s", *source_ptr);

}

//Main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int run_program ()
{
    int ;
    char source[6] = {'D', 'I', 'L', 'L', 'O', 'N'}, destination[10];
    char *source_ptr, *destination_ptr;

    source_ptr = source;

    my_str_n_cat(&source_ptr);
}

2 个答案:

答案 0 :(得分:2)

有多个问题,

  1. 此定义,

    char source[6] = {'D', 'I', 'L', 'L', 'O', 'N'}
    

    无法像您尝试的那样打印printf()

    printf()函数,"%s"说明符需要一个指向字符串的指针作为参数,严格来说,你的字符串不是字符串。

    要使它成为字符串,它需要一个终止nul字节'\0',所以这是正确的

    char source[7] = {'D', 'I', 'L', 'L', 'O', 'N', '\0'}
    
  2. 您将指针传递给printf()时取消引用,您不应该在*之前移除source_ptr

  3. 您正在传递数组的地址,并且您不需要,因为数组名称等同于指向数组的第一个元素的指针,所以这个

    my_str_n_cat(source_ptr);
    

    就足够了。

    这里的主要区别是指针的类型,它给出了在执行指针运算时或通过下标运算符取消引用指针时使用的编译器信息,这基本上是相同的。

    在这种情况下,不会发生任何特殊情况,因为poitner正在被转换为正确的指针类型。

    这是表明您未启用编译器警告的事情之一。

  4. 您不能说编译器中有警告,这意味着您没有启用它们,您应该始终让编译器帮助您找到错误,非常常见,这就是大多数编译器具有良好诊断功能的原因,您可以通过切换到编译器命令来启用它们。

答案 1 :(得分:0)

我认为您需要更好地理解指针here,这很容易。

char my_str_n_cat (char *source_ptr)
{
   printf("My Name Is %s\n", source_ptr);

}

//Main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int run_program ()
{
  char source[6] = {'D', 'I', 'L', 'L', 'O', 'N'}, destination[10];
  char *source_ptr, *destination_ptr;

  source_ptr = source;

  my_str_n_cat(source_ptr);
}