我在以下代码中读取动态字符串时出错:

时间:2015-05-31 21:20:01

标签: c

我在以下代码中读取了错误字符串:

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

    main()

{
 int i = 0, j = 0,count=0;

 char x,*str3;

 char str2[50] = "nadir beton12345!";

for (; x = str2[i] = str2[j]; j++)
 {
    if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z')
    {
        count++;

        i++;
    }
}

        str3 = (char *)malloc((count * sizeof(char))+1);

        printf("the new str without spaces and numbers is: \"%s\"\n", str3);

        free(str3);
}

我调试程序,当调试器到达动态分配时,它无法读取字符串。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你的问题不在于malloc,而在于作业:

char str2[50] = "nadir beton12345!";

这将创建一个位于进程虚拟内存的只读段中的常量字符串。所以这个

str2[i] = str2[j]

无法完成。

您应该在循环之前分配str3并将str3更新为:

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

main()

{
   int i = 0, j = 0,count=0;

   char x,*str3;

   char str2[50] = "nadir beton12345!";

   str3 = (char *)malloc((count * sizeof(char))+1);

   for (; (x = str3[i] = str2[j]) != '\0'; j++)
   {
      if (x >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z')
      {
        count++;

        i++;
      }
   }

   printf("the new str without spaces and numbers is: \"%s\"\n", str3);

   free(str3);
}

希望我帮忙,