string不以null结尾

时间:2013-12-02 20:24:56

标签: c++ string function concatenation

我是C ++的初学者,我遇到了以下代码的问题:

我正在尝试将“新行”或"\n"连接到char矩阵中的字符串。 到目前为止,我设法连接了一个" "字符,但是字符"\n"或只输入多个" "将无效。

实际样本为3个矩阵我定义的值中的每一个得到3个const值为10(max chars)的字符串 - 为前两个赋值,并使用函数“更改”第三个并打印它。

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

const int LINES = 3;
const int MAXCHARS = 10; //TO DO: change to 81 for final version

void cpyAndCat(char[][MAXCHARS], char[][MAXCHARS], char[][MAXCHARS], int);
void main()
{
    char text1[LINES][MAXCHARS], text2[LINES][MAXCHARS], text3[LINES][MAXCHARS];

    cout << "Enter " << LINES << " lines into text1:\n";
    for (int i = 0; i < LINES; i++) // assign the matrix of chars text1 with strings
    {
        _flushall();
        cin.getline(text1[i], MAXCHARS);
    }
    cout << "Enter " << LINES << " lines into text2: \n";
    for (int i = 0; i < LINES; i++) // assign the matrix of chars text2 with strings
    {
        _flushall();
        cin.getline(text2[i], MAXCHARS);
    }
    //TO DO: call the function which will recieve text1 and text2 
    //and put blank line(line too long) or copied line from text1 and catanted line form text2.(long correct size)
    cpyAndCat(text1, text2, text3, LINES);
    cout << "============================================================\n";
    for (int i = 0; i < LINES; i++) // print third matrix of chars, prints 3 lines of either text or '\n'
    {
        _flushall();
        cout << text3[i];
        cout << endl;
    }

    system("pause");

}
void cpyAndCat(char text1[][MAXCHARS], char text2[][MAXCHARS], char text3[][MAXCHARS], int lines)
{

    for (int i = 0; i < lines; i++) // searches if length of string from first 2 matrix is valid
    {
        if (strlen(text1[i]) + strlen(text2[i]) < MAXCHARS) // if so, copy the first to the third and catanate the second to the third
        {
            strcpy_s(text3[i], text1[i]);
            strcat_s(text3[i], text2[i]);
        }
        else // if else (: , catanate 'new line' to the third matrix
        {
            strcat_s(text3[i], "\n"); // not working                                                                           
        }
        cout << endl;
    }
}

2 个答案:

答案 0 :(得分:1)

strcat_sstrcpy_s需要three parameters, not two。我很惊讶你有任何编译。

此外,您strcat登上text3而未初始化它。所以这可能是未定义的行为......

答案 1 :(得分:0)

strcat_s需要3个参数,缺少字节大小,字符串也从未初始化。

您可能希望复制到字符串中,然后在需要时连接。 不要忘记考虑每个字符串末尾的'\ 0'。

strcpy_s(text3[i], 2, "\n");