在c中传递指向字符数组的指针

在c中传递指向字符数组的指针,c,C,我编写了一个小测试程序,看看如何将指向字符数组的指针传递给函数。这是我的代码: #include <stdio.h> #include <string.h> int scopy(char *org ){ printf("the value of org is %s" , org); printf("\n"); } int main(void) { char original[11]; strcpy(original , "hellowo

我编写了一个小测试程序,看看如何将指向字符数组的指针传递给函数。这是我的代码:

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

int scopy(char *org ){
    printf("the value of org is %s" , org);
    printf("\n");
}

int main(void)
{
    char original[11];
    strcpy(original , "helloworld");

    scopy(original);

    printf("the value of original now is %s" , original);

    return 0;
}

它不在“\0”处终止。strcpy文档声明“\0”已复制到char数组

org是一个指向char的指针,char是您正在传递的内容(指向数组第一个元素的指针)。在printf中使用说明符
%s
时,将指向字符的指针视为字符串;如果要将其值打印为指针,则应使用
%p
。例如:
printf(“org中的内存地址是%p\n”,org)

从你说的话中,我感觉到你认为
%s
会将数字转换成字符串。它不会这样做,它需要一个指向字符串第一个字符的指针


请记住,数组的名称相当于
&数组[0]
,即在函数中传递数组名称时,传递的是指向第一个元素的指针。在这里,当您调用
scope(original)
时,它与编写
scope(&original[0])
是一样的,因为
original[0]
是一个
char
并且
&
是指向它的指针,这就是为什么您的函数采用
char*

是的,当您调用
scope(original)时,您是对的,将传递一个指向1的指针。原始
数组中的元素

1(原件)
完全相同(&original[0])

但是,您将%s与printf一起使用。%s期望匹配的参数是一个字符指针,指向一个字符序列,该序列的结尾是一个0字节。这就是C所称的字符串

这意味着你不能做,例如,
printf(“%s”,org[i]),因为org[i]是字符,所以它不是指向以0字节结尾的数组的字符指针

您可以通过执行
prinf[%c],org[0])
`while(out[i]!='\0')来打印单个字符

或者对于您的while循环:

while(out[i] !='\0')
  printf("%c",out[i]);
你也可以试试:

while(out[i] !='\0')
  printf("%s",&out[i]);
while(out[i] !='\0')
  printf("%s",&out[i]);