gpt4 book ai didi

c - 在函数中设置字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:53 25 4
gpt4 key购买 nike

我在 64 位 Linux 上运行我的 C 程序。我已经编写了两个小函数,我将向其传递一个 char 数组,该数组将由函数填充并返回。

我在使用第一个函数 func1() 时遇到了一些问题。

函数是函数 1:

void func1(char *str1)
{
short optiony = 0;

printf("\tfunc1: str1 at %u\n", str1);

printf("\tProvide the option:\n");
scanf("%d", &optiony);

if(optiony== 1)
{
strcpy(str1, "168.98.173.44");
}

printf("\tfunc1: str1 at %u is %s\n", str1, str1);
}

函数2:

void func2(char *str2)
{
short optiony= 0;

printf("\tfunc2: str2 at %u\n", str2);

printf("Provide the option:\n");
scanf("%d",&optiony);

if(optiony== 1)
{
strcpy(str2, "168.97.176.146");
}

printf("\tfunc2: str2 at %u is = %s\n", str2, str2);
}

主要内容:

main(int argc, char* argv[])
{
char str1[10] = "\0";
char str2[10] = "\0";

printf("main: str1 at %u\n", &str1);
func1(str1);
printf("main: str1 at %u is %s\n\n", &str1, str1);

printf("main: str2 at %u\n", &str2);
func2(str2);
printf("main: str2 at %u is %s\n", &str2, str2);

return(0);
}

输出是:

main: str1 at 4149951616
func1: str1 at 4149951616
Provide the option:
1
func1: str1 at 4149951616 is 168.98.173.44
main: str1 at 4149936112 is
^
|
--------------------------------note the change of address

main: str2 at 4149936096
func2: str2 at 4149936096
Provide the option:
1
func2: str2 at 4149936096 is = 168.97.176.146
main: str2 at 4149936096 is 168.97.176.146

问题发生在主程序中,在调用从 func1() 返回后,传递给它的变量地址看起来发生了变化。因此,函数内设置的值不会反射(reflect)在 main 中。func2() 中没有出现此问题。

这段代码有什么错误?

最佳答案

 char str1[10] = "\0";
char str2[10] = "\0";

str1str2 的范围是从 09 ,所以两者都只能容纳 9 个字符,最后一个为空。

strcpy(str1, "168.98.173.44");// storing more than 10 characters
strcpy(str2, "168.97.176.146");// storing more than 10 characters

加号-

printf("main: str1 at %u is %s\n\n", &str1, str1);
^this specifier is to print unsigned int .

要打印地址,请使用 %p

关于c - 在函数中设置字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com