看看就走 发表于 2020-4-12 17:27

c语言字符串赋值问题


int num;
        char **p;
        char temp;
        puts("how many words do you wish to enter? ");
        scanf("%d", &num);
        printf("enter %d words now:\n",num);
        p = (char **)malloc(num * sizeof(char *));
        for (int i = 0; i < num; i++)
        {
                scanf("%s", temp);
                *p = (char *)malloc((strlen(temp)+1) * sizeof(char));
                for (int a = 0; a < strlen(temp); a++)
                {

                        p = temp;
                       
                }
                p = '\0';
               
                //strcpy(*p, temp);
               
        }
       
        puts("here are your words:");
        for (int i = 0; i < num; i++)
        {
                puts(p);
        }

为什么用循环给地址一个一个赋值字符时报错,但是把赋值部分改用strcpy()函数可以正常运行?
希望哥哥们教一下,谢谢

庞晓晓 发表于 2020-4-12 18:00

bp946 发表于 2020-4-12 18:15

11行,*p 改为 p

Anekys 发表于 2020-4-12 18:16

我记得在C语言中字符串与字符数组不是同一个东西{:301_1008:}

看看就走 发表于 2020-4-13 10:54

bp946 发表于 2020-4-12 18:15
11行,*p 改为 p

这样正确了,谢啦。
但是我再问一下,如果*p不改,在下面加个p++;来移动指针可以吗?

bp946 发表于 2020-4-13 11:14

看看就走 发表于 2020-4-13 10:54
这样正确了,谢啦。
但是我再问一下,如果*p不改,在下面加个p++;来移动指针可以吗?

可以,要加个临时指针保存原来的p地址,直接加p的位置就移动了
页: [1]
查看完整版本: c语言字符串赋值问题