0

这是显示读取的字符串的显示函数。

void print(char **s,int T)
{   

    while(*s)
    {

        printf("i: String : %s\n",*s++);

    }

}



int main()


{



int T =0,i=0;

    char ** s, *c;
    printf("Enter number of Testcases:\n");
    scanf("%d",&T);
    s = (char **)malloc(T*sizeof(char *));
    printf("Size allocated : %lu\n",sizeof(s));

    while(i++ < T)
    {
        s= (char *)malloc(10000*sizeof(char));
        scanf("%s",*s++);

    }
    print(s,T);


    return 0;
}
4

2 回答 2

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

void print(char **s,int T){
    int i=0;
    while(T--){
        printf("%d: String : %s\n", ++i, *s++);
    }
}

int main(){
    int T =0, i=0;
    char **s, **p;
    size_t size;

    printf("Enter number of Testcases:\n");
    scanf("%d",&T);
    p = s = (char **)malloc(size=T*sizeof(char *));
    //printf("Size allocated : %zu\n", size);
    printf("Size allocated : %lu\n", (unsigned long)size);

    while(i++ < T){
        char tmp[10000];
        scanf("%9999s", tmp);
        *p++ = strdup(tmp);//strdup is not standard function
    }
    print(s,T);
    //deallocate
    return 0;
}
于 2014-09-26T00:53:51.440 回答
0

这段代码:

s= (char *)malloc(10000*sizeof(char));
scanf("%s", *s++);

应该:

s[i-1] = malloc(10000);
scanf("%9999s", s[i-1];

我建议重构循环,以便i在循环内使用而不是i-1.

您最初的想法不起作用,因为:

  • 你写s而不是*smalloc
  • 一旦这个循环结束,s就指向列表的末尾;但是你然后传递s给你的 print 函数,它需要一个指向列表开头的指针

此外,该print函数当前迭代数组的末尾(如果您s按照我上面的建议正确传递,那就是)。相反,它应该在打印T字符串后停止。您可能应该将呼叫更改为print(s, i);; 更新print到基于该循环int,并添加scanf失败检查。

于 2014-09-26T00:37:13.720 回答