char* string; scanf("%s",&string);错在哪
时间: 2024-02-18 16:02:52 浏览: 64
`char* string` 是一个字符指针,它只是一个指针变量,没有为它分配内存空间。在使用它之前需要为其分配内存空间。
`scanf("%s", &string)` 语句中,`&string` 是一个指向指针的指针,而 `scanf()` 函数需要的是指向字符数组的指针,因此这里的传参方式也是错误的。
正确的写法应该是:
```c
char string[100]; // 假设最多读入 100 个字符
scanf("%s", string);
```
这里我们使用了一个固定长度的字符数组 `string`,可以通过 `scanf()` 函数来读取用户输入的字符串。注意,`scanf()` 函数会在读取到空格或换行符时停止,因此只能读取一段不含空格的字符串。如果需要读取含空格的字符串,可以使用 `fgets()` 函数来代替 `scanf()` 函数。
相关问题
char *string; scanf("%s",string);
`char *string;` 这是一个指针变量,它指向一个字符数组(字符串)。`%s` 是 `scanf` 函数的一个格式说明符,用于从标准输入读取用户输入的一串空格分隔的字符,直到遇到换行符为止,并将其存储到给定的字符数组 `string` 中。
例如,当你运行这样的代码时,程序会提示用户输入一个字符串,然后将用户的输入保存到 `string` 指向的那个内存位置。需要注意的是,`scanf` 不会在字符串末尾自动添加空字符 `\0`,所以在处理完用户输入后,可能需要手动添加 `\0` 来确保它被视为有效的 C 语言字符串。
```c
#include <stdio.h>
int main() {
char *string;
printf("请输入一个字符串: ");
scanf("%s", string);
// 添加空字符,防止缓冲区溢出
string[strlen(string)] = '\0';
printf("你输入的字符串是: %s\n", string);
return 0;
}
#include<stdio.h> #include<string.h> int main() { char str[100]; char *p; p=&str; scanf("%s",&str); while(*p!='\0') {
代码中缺少了结尾的 `}`,补充代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
char *p;
p = str;
scanf("%s", str);
while (*p != '\0') {
/*******************************
请在该部分补充缺少的代码
********************************/
printf("%c", *p); // 示例代码:输出每个字符
p++;
}
return 0;
}
```
在缺失的部分中,可以根据题目要求进行相应的处理。例如,题目要求是删除字符串中的非英文字母字符,可以使用判断条件来判断当前字符是否为英文字母,如果是,则进行相应的处理,否则跳过该字符,具体代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
char *p;
p = str;
scanf("%s", str);
while (*p != '\0') {
if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z')) {
// 如果是英文字母,则输出
printf("%c", *p);
}
p++;
}
return 0;
}
```
注意,`scanf("%s", &str);` 应该修改为 `scanf("%s", str);`,因为 `str` 已经是指向字符数组的指针,不需要再加取地址符 `&`。
阅读全文