【问题标题】:diffculty in entering strings in C using pointer使用指针在 C 中输入字符串的困难
【发布时间】:2014-03-05 18:40:30
【问题描述】:

以下程序在 gcc 中工作,但在给出 T = 6 的值时,该程序继续运行并且不会在请求输入字符串时结束。如果你发现这个程序有什么问题,有什么帮助吗?

int main()
{ int T,i,j;
  char *strings[T];
  printf("Enter the Number of Strings to Reverse : \n");

  scanf("%d ",&T);

  for(i=0;i<T;i++)
   { strings[i] = (char *)malloc(100*sizeof(char));
     scanf("%s\n",strings[i]);
   }
  for(i=0;i<T;i++)
   {printf(" The String %d is : %s\n",i+1,strings[i]);
  }
return 0;
}

【问题讨论】:

  • T 在创建指针数组时未初始化strings
  • @Andreas 知道了,但是数组长度为 0(T 会被初始化为 0),对吧?
  • @Andreas T 将在程序执行时由用户给出。
  • 但是strings 已经被分配了。阅读stackoverflow.com/questions/14049777/…
  • @JohnYost 局部变量不能指望被隐式初始化,所以不,T 不会(可靠地)初始化为 0。

标签: c


【解决方案1】:

T 未初始化(请记住,在 C++ 中,局部范围变量不会自动初始化):

int T= 6; 

【讨论】:

    【解决方案2】:

    T 未在 main() 内部初始化,因此具有未定义的值。

    char *strings[T] 创建一个未定义长度的char * 指针数组。

    使用以下方法修复此问题:

    int T=6;
    

    或者,给定T 实际上是常数:

    const int T=6
    

    或许更好

    #define T 6
    

    请随意使用比 T 更易记的名称。

    【讨论】:

    • 但是T值会在程序执行时由用户给出。
    • @user1463736,是的,但是指针数组已经在内存中分配了!
    • @smarinov 好的,现在知道了。谢谢大家的帮助!
    • 您可以在读取T 之后移动strings 的声明。但是,您依赖(我相信)一个 gnu 扩展来工作。更常见的方法是使用malloc() 动态分配大小为T * sizeof (char *) 的数据结构。
    • @abligh 谢谢我得到了答案。
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多