解释这段代码的正确方法是什么?

时间:2016-04-14 11:06:48

标签: c string pointers

st 不应该是指向char的指针数组而不是指向char的指针吗?我不明白后者for loop如何打印值?

int main(void)
{
    char temp[256]; 
    char *st;
    for (int i = 0; i < 3; i++)
    {
       scanf("%s", temp);
       st= strdup(temp);
    }

    for(int i=0;i<3;i++)
    {
        printf("%s",st);
    }    
}

1 个答案:

答案 0 :(得分:2)

你可能想要这个:

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

int main(void)
{
    char temp[256]; 
    char *st[3];     // array of three pointers to char

    for (int i = 0; i < 3; i++)
    {
       scanf("%255s", temp);   // prevents potential buffer overflow
       st[i] = strdup(temp);
    }

    for(int i = 0; i < 3; i++)
    {
        printf("%s\n", st[i]);
        free(st[i]);           // free strduped memory
    }
}

此程序显示:

  

./ a.out的
  11个
  22个
  33个
  11个
  22个
  33

您的程序显示

  

./ a.out的
  11个
  22个
  33个
  33个
  33个
  33

这是因为:

char *st;        // in your prog. you only declare one pointer

for (int i = 0; i < 3; i++)
{
   scanf("%s", temp);
   st= strdup(temp);   // here you overwrite the st pointer loosing
                       // the string strduped in the previous run of the loop
}