作者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
1F:→ nowar100:我想请问真的有 C Primer 吗 我指找到 C++ Primer 和 10/23 18:09
2F:→ nowar100:C Primer Plus 都找不到 C Primer @_@" 10/23 18:09
3F:→ hsnucsc:sorry, 应该是C Primer plus 10/23 18:14
4F:→ nowar100:喔喔 最近想研究圣经本 一直找不到 XDD 10/23 18:24