字符数组不符合新大小

时间:2014-05-09 19:42:40

标签: c++ arrays strlen

我无法弄清楚如何解决这个问题。它是关于从文件中逐行读取字符串 - 然后将每一行放在一个新的更大的字符中。这里的问题是后者characterarray(newStr)只从文本文件中获取第一行 - 如果看起来是新文件的stringlenght。但我试图超越数组长度并猜测是什么? - 是的 - 在这里我找到了第二排的字符。

那么 - 我做错了什么或错过了什么?为什么strlen(newStr)不符合新的更大字符串?

void read3() {

   const char* FILE_NAME = "myfile2.txt";
   std::ifstream infil;
   infil.open(FILE_NAME);

   char ch[25];
   char newStr[200];

   for (int i = 0; i < 200; i++) {
       newStr[i] = 0;
   }
   for (int i = 0; i < 25; i++) {
       ch[i] = 0;
   }

   int pos = 0;
   while (infil.getline(ch, 25)) {
       unsigned int i;
       for (i = 0; i <= strlen(ch); i++) {
           newStr[pos + i] = ch[i];
       }
       pos += i;
   }

   for (unsigned int i = 0; i < strlen(newStr); i++) {
       std::cout << newStr[i];
   }
   std::cout << std::endl;

   // a second print of newStr beyond the loop to see if there are characters
   for (unsigned int i = 0; i < strlen(newStr) + 24; i++) {
       std::cout << newStr[i];
   }

   std::cout << "\nlength of newStr: " << strlen(newStr);

}

int main() {

  read3();

return 0;
}

这是文本文件的内容

 I am a row in notepad
 I am the second row :-)    

以下是从consolewindow打印的内容

1。如果在边界内循环

  I am a row in notepad

2。如果循环超出界限

  I am a row in notepad[]I am the second row :-)     

2 个答案:

答案 0 :(得分:4)

而不是:

for (i = 0; i <= strlen(ch); i++) {

写下这个:

for (i = 0; i < strlen(ch); i++) {

使用<=它还会复制\0,这会使strlen(newStr)仅返回第一行的长度(因为在第一行之后有\0)。< / p>

答案 1 :(得分:0)

我认为strlen(newStr)返回的字符数直到第一个\ 0。所以你只得到第一行直到第一行\。