0

嗨朋友们,我是 C 的新手,试图理解它。

我有这两个 char 数组,一个是初始化的,另一个是刚刚声明的,我只是想将元素从数组状态复制到 arr 并打印出来。它编译,但打印一个垃圾值....

请帮我

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
     int i = 0;
     char *arr[3];
     char *state[3] = {"California", "Oregon", "Washington", "Texas"};

     for(i=0; i<3; i++)
     {
         arr[i] = state[i];
         printf("%s\n",arr+i);             
     }

     arr[0] = state[0];

     printf("%s\n",arr[0]);
     system("pause");

     return 0;    
}
4

3 回答 3

7

打印arr+i可能不是您想要的。相反,您想要arr[i]的是更深一层的间接层。

具体来说,a[b]和 完全一样*(a+b)

于 2013-03-27T10:46:57.253 回答
1

首先,我认为您初始化的方式state是错误的。它最多应该有 3 个项目,但你已经给出了 4 个项目(“德克萨斯”)。将其更改为:

char *state[3] = {"California", "Oregon", "Washington"};

除此之外,arr+i给出 的第 i 个指针的地址arr。为了打印第 i 个指针指向的字符串,像这样arr使用,它类似于.**(arr+i)arr[i]

此外,请不要使用system("pause");; getchar()做得更好。

于 2013-03-27T11:00:28.683 回答
0

首先,您将两个数组的大小都取为 3,这是错误的。数组中有四个字符串值,state因此正确的数组大小为 4。

char *arr[4];
char *state[4] = {"California", "Oregon", "Washington", "Texas"};

其次,您正在打印坚持值的数组“arr”的地址。

// wrong way
for (i = 0; i < 3; i++)
{
    arr[i] = state[i];
    printf("%s\n", arr + i);
}

第三,您以错误的方式访问数组“arr[0]”的第一个值。在这里,您必须使用指针来访问值。

// wrong way
printf("%s\n", arr[0]);

这是使用指针将值从一个数组复制到另一个数组的正确方法。

#include<stdio.h>

int main(int argc, char *argv[])
{
    int i = 0;
    char *arr[4];
    char *state[4] = {"California", "Oregon", "Washington", "Texas"};

    for(i = 0; i < 4; i++)
    {
        arr[i] = state[i];
        printf("%s\n", *(arr + i));
    }
    arr[0] = state[0];

    printf("%s\n", *(arr));
    system("pause");
    return 0;
}
于 2013-07-02T14:08:32.097 回答