尝试将字符串转换为 char[][] 时出现问题

Posted

技术标签:

【中文标题】尝试将字符串转换为 char[][] 时出现问题【英文标题】:Troubles trying to convert string to char[][] 【发布时间】:2022-01-08 22:44:13 【问题描述】:

我正在构建一个名为 Board 的类,它将从 txt 文件中获取它的详细信息。

#define ROW 25;
#define COL 80;
class Board

    char _board[ROW][COL] = 0;

public:
    Board(string name); // our new constructor - reads map from file.
;

它接收字符串名称,并尝试打开具有特定名称的文件。 如果我们确实在正确的文件中,我想从中读取字符,并将它们复制到板上。 我一直在尝试几件事,总结在这段代码中:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
    Board::Board(string name)

    string line;
        ifstream file(name);
        int i = 0;
    if (file.is_open())
        
            while (!file.eof())
            
    
            (1) getline(file, line);
            (2) const char* test = line.c_str();
            (3) strcpy_s(_board[i], test);

        (4) _board[i] = line;

                    i++;

            
// MORE FUNCTIONS NOT RELEVANT TO THIS QUESTION
        

我收到以下错误: 对于 (3):程序崩溃。 对于 (4):表达式必须是可修改的左值。 对于(1),(2):测试和线路工作良好。

有没有其他更简单的方法可以将字符串复制到 char* 而不使用丑陋的循环,并复制每个字符? 为什么 (3) 会导致我的程序崩溃?

提前致谢!

【问题讨论】:

Why is iostream::eof inside a loop condition (i.e. while (!stream.eof())) considered wrong? 【参考方案1】:

不相关,但 void main() 已被弃用多年且在当前版本的标准中不正确:应为 int main()...

下一个while (!file.eof()) 是一个常见但可怕的事情:eof 只有在读取操作没有返回任何内容后才变为真。这意味着您将处理最后一行两次...

对于您的错误:

(4) _board[i] 是一个数组,一个数组不能在赋值的左边(惯用语:它不是一个左值

(3):strcpy_s 不是替代strcpy 并且您的编译器应该发出警告(任何正确编译器都会发出.. .)。应该是:

  strcpy_s(_board[i], COL, test);

【讨论】:

感谢您的评论。我已经更新了循环条件,但是 strcpy_s(_board[i], COL, test) 使我的程序崩溃了。即使在使用 strcpy 时,我也会收到 CRT_SECURE 警告,即使我在页面开头定义它也是如此。【参考方案2】:
#include <iostream>
#include <fstream>
#include <string>
#define ROW 25;
#define COL 80;
int i=0;
class Board

    char _board[ROW][COL] = 0;

public:
    Board(string name); // our new constructor - reads map from file.
;
Board::Board(string name)

   fstream newfile;

   newfile.open(name,ios::in); 

   if (newfile.is_open())   

      string tp;
      while(getline(newfile, tp)) 
        strcpy(_board[i], tp);
        i++;
      
      newfile.close(); 
   

【讨论】:

对于此代码,我收到以下错误:“不存在从 std::string 到 const char * 的合适转换函数”。有没有我可能遗漏的内容?

以上是关于尝试将字符串转换为 char[][] 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

将字符串从 std::string 转换为 const char * 时出现数据丢失问题

将 C/C++ 无符号字符转换为 JAVA 时出现问题

尝试将 char 转换为字符串以放入方法中;我哪里错了?

尝试将字符串输入转换为可设置为实体 int32 属性的整数值时出现问题

将 char 转换为 int 的奇怪错误(目标 C)

将 *binary* 字符串转换为数字时出现 NumberFormatException