C-fscanf使用字符指针,但不能使用双字符指针吗?

笔275

我有以下代码:

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    char **string = malloc(sizeof(char) * 20);
    FILE *fp = fopen("input.txt", "r");
    fscanf(fp, "%s", *string); 

    printf("%s\n", *string);

}

此代码生成分段错误。但是,如果我更改**string为单个字符指针并将*strings更改string它可以工作。为什么是这样?以及如何将fscanf与指针数组一起使用?

谢谢。

以赛亚书
char **string = malloc(sizeof(char*)); // Pointer to pointer --> Alloc size of a POINTER
*string = malloc(sizeof(char) * 20); // Dereference and then you can malloc chars

在将指针分配给指针时,首先要分配指针的大小然后,您可以取消引用该变量并分配指针内容的大小,在这种情况下,将指向该指针所指向的字符数。

同样,您的使用fscanf不仅不安全,而且完全没有必要。

使用fgets来代替:

fgets( *string, 20, fp );

如果要分配一个指向chars的指针数组,则在分配指针到指针时,将char *的sizeof数字乘以数字条目。您还必须使用for循环为每个字符指针分配内存,如上所示。

// Example code
char **string = malloc(sizeof(char*) * 10); // Allocates an array of 10 character pointers
if (string == 0) {
  fprintf(stderr, "Memory allocation failed.");
  exit(1);
}
int i = 0;
FILE *fp = fopen("input.txt", "r");
if (fp == 0) {
  fprintf(stderr, "Couldn't open input.txt for reading.");
  exit(1);
}
for (; i < 10; ++i) {
  string[i] = malloc(sizeof(char) * 20); // For each char pointer, allocates enough memory for 20 characters
  if (string[i] == 0) {
    fprintf(stderr, "Memory allocation failed.");
    exit(1);
  }
  fgets(string[i], 20, fp);
  printf("%s\n", string[i]);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C中使用字符指针为结构分配内存

来自分类Dev

C ++ std :: vector :: emplace_back不能使用字符串值类进行编译

来自分类Dev

如何使用指针而不使用字符串库将字符数组复制到'c'中的另一个字符数组

来自分类Dev

为什么不能重新分配字符串数组,但是字符串指针可以使用C语言?

来自分类Dev

C编程语言:if语句不能正确使用字符

来自分类Dev

字符指针算法C

来自分类Dev

C ++中字符的指针

来自分类Dev

C-使用指向字符数组的指针打印网格

来自分类Dev

C函数使用指针更改字符串

来自分类Dev

C程序使用指针复制整数字符串

来自分类Dev

使用c中的字符指针打印整数值

来自分类Dev

使用C中的指针从int变量访问字符

来自分类Dev

使用指针更改C函数中的argv字符串

来自分类Dev

使用指针和字符串打印(C)

来自分类Dev

使用指针在c中进行字符串处理

来自分类Dev

C-使用指向字符数组的指针打印网格

来自分类Dev

C程序:使用函数更新无符号字符指针数组

来自分类Dev

使用C中的指针从字符串中删除元音

来自分类Dev

在 C 中将 * 与字符串指针一起使用

来自分类Dev

strcmp()可以在C ++中使用字符串吗?

来自分类Dev

使用getopt()C解析双字符命令

来自分类Dev

Swift不能使用函数指针吗?

来自分类Dev

这样使用字符串指针安全吗?

来自分类Dev

'?' 此处不能使用字符

来自分类Dev

这 '?' 此处不能使用字符

来自分类Dev

mysqldump cron 不能使用字符 >

来自分类Dev

C字符串指针

来自分类Dev

为什么在C中打印字符而不在字符串时使用星号作为指针?

来自分类Dev

使用字符减法的C strcmp实现

Related 相关文章

热门标签

归档