在函数

时间:2015-07-28 14:00:06

标签: c function

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

我遇到第一个函数func1()的一些问题。

功能是 func1的:

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

FUNC2:

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()返回后,主程序中出现的问题是传递给它的变量的地址看起来发生了变化。 因此,函数内部设置的值不会反映在main中。 func2()中没有出现此问题。

此代码中的错误是什么?

2 个答案:

答案 0 :(得分:3)

FacebookDisplayName

char str1[10] = "\0"; char str2[10] = "\0"; str1的范围从str20,因此两者都只能容纳9个字符,最后一个字符为空。

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 .

答案 1 :(得分:2)

对于这个问题。您应该使用%p打印指针的地址,而不是%u