سؤال

وكيف أضع السلاسل في صفيف شار 2D من (على سبيل المثال) ملف؟

char buffert[10][30];
int i = 0;

while(!feof(somefile)) {
  fscanf(somefile, "%s", temp);
  buffert[i][] = temp;
  i++;
}

وهذا لن تفعل ذلك.

هل كانت مفيدة؟

المحلول

هل بعيدا مع درجة الحرارة، وإسقاط كل سلسلة على التوالي في المساحة التي تم إنشاؤها لذلك (في buffert في هذه الحالة).

char buffert[10][30];
int i = 0;
FILE * fp = fopen("myfile", "r");
while(!feof(fp)) { 
  fscanf(fp, "%s", buffert[i]);
  i++;
}

ويسمى هنا مؤشر الملف FP. سيكون لديك لجعل مجموعة من الضوابط لمنع فيضان 10 إدخالات المتاحة في buffert، أو 30 حرف المتاحة في كل من السلاسل لها. يجب أيضا تجنب feof ().

نصائح أخرى

وجرب هذا:

while(i < 10 && fscanf(somefile, "%29s%*[^ \t\n]", buffer[i]) != EOF) {
  i++;
}

وتنسيق محدد "%29s" يقرأ ما يصل إلى 29 حرفا في buffer[i]، الذي هو كل ما لديه مساحة ل. و"%*[^ \t\n]" يقرأ ويلقي بعيدا غير بيضاء، في حال كانت سلسلة أطول من 29 حرفا.

وبالإضافة إلى ذلك، while (!feof()) { } هو دائما تقريبا الشيء الخطأ القيام به، لأنه لم يتم تعيين EOF على تيار حتى مصادفة نهاية الملف.

هذا المنتدى :

#include <stdio.h>

main()
{
  int dirsize = 80;
  char array[9][dirsize];
  int linenum = 0;
  FILE *filepointer;
  filepointer = fopen("projectfile.txt","r");
  while (feof(filepointer) == 0)
  {
    linenum++;
    fgets(array[linenum], dirsize, filepointer);
  }
  fclose(filepointer);
} 

وحل آخر مع مؤشر إلى المصفوفات بدلا من مجموعة من المصفوفات غير هنا.

وأنها لا تبدو لي مثل كنت تنسخ الواقع السلسلة إلى صفيف. أنا مندهش أنه يجمع. أنا في عداد المفقودين شيء؟

والنظر في strcpy أو strncpy، أو يمكنك نسخ تستخدم لالحلقات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top