我在以下代码中读取了错误字符串:
#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);
}
我调试程序,当调试器到达动态分配时,它无法读取字符串。
感谢。
答案 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);
}
希望我帮忙,