2015-04-27 81 views
0

尽管我努力解决我的问题,但无论何时编译我的代码,它都有错误或者立即失败。我的目标是在我的'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

有超过一个问题,

  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正在转换为正确的指针类型。

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

,你不说,有警告从你的编译器的事实,意味着你没有启用它们,你应该总是让你的编译器帮助你发现是非常常见的错误,这是为什么大多数编译器都具有良好的诊断功能,并且可以通过向编译器命令提供开关来启用它们。

+1

而当你在它的时候,语句'(* source_ptr);'什么都不做。这相当于'69;'。 –

+0

感谢您的回复,不幸的是我的my_str_n_cat(&source_ptr)有一个错误,说“没有重载函数的实例'my_str_n_cat'匹配参数列表参数类型是:(char **)”任何想法如何解决这个问题?当我删除ambersand时,它只是输出字符串ass null。 –

+0

@DillonJ。您正在使用** C++ **编译器,这是因为我的答案中的第三点,您正在传递一个不兼容类型的指针。如果你使用c,你需要配置你的环境,以便它使用正确的编译器。 –

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); 
} 
+0

为什么选择投票? – issathink

+0

你最初没有解释任何东西。 –

+0

@issathink我认为根据iharob,我的环境出了问题,因为这会打印出“我的名字是”谢谢你的帮助 –