数组指针功能

时间:2011-11-01 17:40:51

标签: c arrays pointers

我一直在寻找解决方案,但还没有找到解决方案。

我有一个函数可以执行一些字符串操作(简化):

void plr(char str, char *stro){
     strcpy(*stro, str);
}

我的问题在于我无法从函数中获取结果:

int main(void){
    //string and string out.
    char str[25], stro[25];
    printf("Something please: ");
    scanf("%s", &str);

    plr(str, &stro); // So basically stro would be the same as str.
    printf("Copy succesfull, %s", stro);
    return 0;
}

整个想法是我有函数pluralis,它会将pluralis附加到给定的字符串并将其输出到stro。整个字符串操作已经过测试并且可以工作,如果它在main()中,但我根本无法使用函数和指针。我显然可以离开它,但我会从中学到什么。

当我指向的数组时,我需要考虑一些事情,而不是正常的排序值。

编辑:感谢所有帮助,它已经解决了。非常感谢所有人!

4 个答案:

答案 0 :(得分:2)

你应该这样做:

void plr(char str[], char stro[])
{
     strcpy(stro, str);
}

int main(void)
{
    char str[25], stro[25];
    printf("Something please: ");
    scanf("%s", &str); //unsafe code

    plr(str, stro); 
    printf("Copy succesfull, %s", stro);
    return 0;
}

使用指向数组或字符串的指针时请务必小心:

  1. http://pw1.netcom.com/~tjensen/ptr/pointers.htm
  2. 使用scanf从用户那里获取字符串对于更多事情来说真是件坏事:

    1. Disadvantages of scanf

答案 1 :(得分:0)

也许您需要一个指向指针的指针,即声明您的函数void plr(char str, char **stro)

答案 2 :(得分:0)

我相信您必须将代码更改为:

void plr(char* str, char *stro)

你想传入数组str,你必须使用指针char * str。

我认为你不能将数组直接传递给函数。

如果你声明char str [25];编译器为数组保留内存,如果使用char *,它将只指向数组中的第一个元素。

我希望这有效!

GR,

迪特

答案 3 :(得分:0)

无需用指针弄乱这种方式;)

blackbear@blackbear-laptop:~$ cat prova.c
#include <stdio.h>
#include <string.h>

void foo(char *strin, char *strout)
{
    strcpy(strout, strin);
}

int main(void)
{
    char a[100], b[100];

    printf("What's a? ");
    scanf("%s", a);

    printf("What's b? ");
    scanf("%s", b);

    foo(a, b);

    printf("a is \"%s\"\nb is \"%s\"\n", a, b);
}
blackbear@blackbear-laptop:~$ gcc prova.c
blackbear@blackbear-laptop:~$ ./a.out 
What's a? abc
What's b? def
a is "abc"
b is "abc"
blackbear@blackbear-laptop:~$ 

<强>阐释:
这是有效的,因为当您使用数组的名称时,它衰减指向其第一个元素的指针。所以foo(a, b)实际上是foo(&a[0], &b[0])。因此,即使ab是数组,将它们传递给函数也会将它们“转换”为指针。
引自here

  

当您将数组作为参数传递给函数时,您确实会传递   指向数组第一个元素的指针,因为数组衰减为a   指针。

,以下几行:

  

腐朽是隐含的&amp ;; array ==&amp; array ==&amp; array [0]。用英语讲,   这些表达式读作“array”,“指向数组的指针”和“指向的指针”   数组的第一个元素“(下标运算符,[])具有更高的元素   优先级而不是address-of运算符)。但在C中,这三个   表达意味着同样的事情。

总结一下,代码中的问题只是plr的原型。

查找数组指针衰减以获取有关此现象的更多信息。 :)