匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 9 年前

C語言 製造一份文件

#include "stdafx.h"

#include "stdlib.h"int _tmain(int argc, _TCHAR* argv[])

{

printf("請問你要輸入幾位客戶資料?\n");

int n;

char *A;

int *B;

scanf("%d",&n);

A=(char*)malloc(n*100);

B=(int*)malloc(n*4); for(int i=0; i<n; i++)

{

printf("請輸入第%d位的姓名/n",i+1);

scanf("%s",&A[i]);

printf("請輸入金額\n");

scanf("%d",&B[i]);

}

FILE *f; f = fopen("D:\\a.txt","w"); for(int i=0; i<n; i++)

{

fprintf(f,"%c %d\n",A[i],B[i]);

} free(A);

free(B);

fclose(f); return 0;

}

我的問題如下 我想要製造一份有客戶姓名又有金額的文件

但是我的客戶姓名只能印出第一個字母 請問問題在哪裡呢?

2 個解答

評分
  • 其威
    Lv 7
    9 年前
    最佳解答

    !!! BUFFER OVERFLOW !!!

    如果你在寫的是 "輸入密碼" 一類的程式, 會有安全性的問題.

    而且名字的部份應該使用二維陣列. 因為 n 個人是一維, 可是 c-style string 是 null terminated char array, 所以要多一維:

    char **A = (char **)malloc(n * sizeof(char *));

    for (int i = 0;i < n;++i) {

    A[i] = (char *)malloc(101 * sizeof(char)); // 要多加一個 '\0' 的位置

    memset(A[i], 0, 101);

    }這樣可以做出 char * A[n][101] 的效果, 能放 n 個人名, 每個人名最多 100 個字元.

    像你原來用 100, 因為還要加上一個 '\0', 所以實際只能存 99 個字元喔~ (不過也可能你本來就只想存 99 個 元字? 我不知道.........)

    底下 fprintf() 裡面, 我猜你應該是想印 "%s", 卻錯打成 "%c".

    程式這種東西, 不會照你想的跑, 只會照你寫的跑......

  • 9 年前

    fprintf(f,"%c %d\n",A[i],B[i]);

    你輸入時用%s 印出來時卻用%c了

還有問題?馬上發問,尋求解答。