【问题标题】:Pointers and Strings relation指针和字符串的关系
【发布时间】:2020-03-22 09:38:03
【问题描述】:

我试图通过试验和测试来理解指针和字符串之间的关系,我试图运行这个程序,但是当我输入文件时,它没有出现错误

char *file_name;

printf("Enter the name of the file:");
gets(file_name);

printf("the file name is: %s",file_name);

【问题讨论】:

  • 问题是什么?
  • 1. gets 已从 C 2 中删除。您认为 file_name 指向什么?
  • 你至少能完成这个问题吗?这至少会让您看起来正在努力解决问题。
  • by trial and test。这本身没问题,但不应该通过参考资源(如教程或书籍)进行系统学习。这些基本的东西将包含在任何这样好的资源中,并且可以省去你每次询问 Stackoverflow 的麻烦。

标签: c string file pointers c-strings


【解决方案1】:

指针

char *file_name;

未初始化并且具有不确定的值。所以下面的语句

gets(file_name);

调用未定义的行为。

此外,gets 函数不是标准的 C 函数,它是不安全的。

您需要做的是分配一个内存来读取文件名,并使用标准 C 函数 fgets 而不是获取。

例如

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

//…

size_t n = 100;
char *file_name = malloc( n );

fgets( file_name, n, stdin );

file_name[ strcspn( file_name, "\n" ) ] = '\0';

printf("the file name is: %s\n",file_name);

//…

free( file_name );

//...

此声明

file_name[ strcspn( file_name, "\n" ) ] = '\0';

需要排除可以通过函数fgets附加到输入字符串的换行符'\n'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多