在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]);