作者hsnucsc (hsnugo)
看板C_and_CPP
標題[語法] const 和 pointer
時間Fri Oct 23 17:42:17 2009
1. 我在C primer有看到一些const的用法
const int n = 1; // n這個變數的內容是不可改的
const int *ptr; //ptr這個pointer指向的位置的內容是不可改的
int *const ptr; //ptr這個pointer 是不可改的
但是我不確定 char *const argv[] 所代表的含意
我目前猜是 " argv是一個array, array的內容是char * ", argv是不可改的
不知道對不對
2.
下面這份code會有warning, 我想是因為text是"一個 array, array的內容是 int [100]"
跟應該傳進print的參數type不合, 不知道對不對
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int stringN;
void print(char *const argv[]) {
int i;
for(i=0; i<stringN; i++)
printf("[%s]\n", argv[i]);
}
int main()
{
int i;
char text[100][100];
char tmp[100];
for(i=0; scanf("%s", text[i]) != EOF && i<100; i++);
1;37mstringN = i;
print(text);
return 0;
}
如果我已經確定input string length不會超過100
那直接宣告一個text[100][100] 應該比 一個個去malloc 最後還要free快
所以我一直在想一個方法, 讓自己可以宣告char text[100][100]
又可以把text傳進function做處理
但是一直想不到
最多只能宣告cahr *text[100];
然後用malloc, 再將讀到的字串copy到text[i]中
希望有人可以幫忙想看看有什麼方法
p.s. 這是我在寫program時遇到的問題, print原本應該是C library中的函式
char *const argv[]是他的參數的format
為了簡化問題, 我才改寫成print
謝謝
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int stringN;
void print(char *const argv[]) {
int i;
for(i=0; i<stringN; i++)
printf("[%s]\n", argv[i]);
}
int main()
{
int i;
char *text[100];
char tmp[100];
for(i=0; scanf("%s", tmp) != EOF && i<100; i++) {
text[i] = (char *)malloc(100 * sizeof(char));
strcpy(text[i], tmp);
}
stringN = i;
print(text);
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.192.18
→ nowar100:我想請問真的有 C Primer 嗎 我指找到 C++ Primer 和 10/23 18:09
→ nowar100:C Primer Plus 都找不到 C Primer @_@" 10/23 18:09
→ hsnucsc:sorry, 應該是C Primer plus 10/23 18:14
→ nowar100:喔喔 最近想研究聖經本 一直找不到 XDD 10/23 18:24