#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main(void) { char* cp; char symbol; int num; printf("enter how many symbols\n"); scanf("%c%d", &symbol, &num); cp = (char*)malloc(num * sizeof(char)); if (cp == NULL) { printf("memory allocation failed\n"); return -1; } cp[0] = symbol; printf("%c ", cp[0]); return 0; }+ cp 0x00000000177c54e0 <读取字符串字符时出错。> char *
时间: 2024-03-04 14:49:37 浏览: 121
#include <stdio.h>
4星 · 用户满意度95%
这段代码在运行时发生了访问非法内存的错误,原因是在调用`scanf`读取输入时,输入的第一个字符被当做换行符读取了,导致后续的内存分配和操作出现问题。
为了解决这个问题,可以在读取输入之前先读取并丢弃输入缓冲区中的换行符。可以在`scanf`调用之前,使用一个额外的`getchar`函数来读取并丢弃换行符。修改后的代码如下:
```
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void) {
char* cp;
char symbol;
int num;
printf("enter how many symbols\n");
getchar(); // 读取并丢弃输入缓冲区中的换行符
scanf("%c%d", &symbol, &num);
cp = (char*)malloc(num * sizeof(char));
if (cp == NULL) {
printf("memory allocation failed\n");
return -1;
}
cp[0] = symbol;
printf("%c ", cp[0]);
return 0;
}
```
这样可以避免访问非法内存的错误,并正确读取输入。
阅读全文