int main(int argc,const char * argv[])
{
char *strList[3]={"abc","hello","love"};
int i;
for(i=0;i<3;i++)
{
NSLog(@"The %s charctor length is %d\n",strList[i],strlen(strList[i]));
}
return(0);
}
通过这个实例,可以看出字符串数组定义。
char *strList[3]={"abc","hello","love"}; 如果字符串中包含引号则需要使用转义符 \ 如在hello的前后加上引号的格式 为 /"hello/"与字符串格式 %s
读取文件中字符串,输出字符长度的实例
int main(int argc,const char * argv[])
{
FILE *file=fopen("/user/peter/Desktop/Lenrn Objective-c Samples/word.txt","r");
char strWorld[100];
while(fgets(strWorld,100,file))
{
strWorld[strlen(strWorld)-1]='\0';
NSLog(@"The txt %s charactor length is %d",strWorld,strlen(strWorld));
}
fclose(file);
return (0);
}
本例中,学习到如何读取txt文件中的类容。首先用fopen函数打开文件,并读取文件内容。第一个参数为文件路径,第二个参数 r 表示只读方式打开。然后存到file中。
接着用fgets函数读取file中的一行文本,fgets(strWorld,100,file)
其中需要注意的一个地方是因为读取的是txt文本文件,因此如果直接用strlen返回的长度会比实际多一位,因此需在字符串末尾加 ‘\0’
当读取完毕之后关闭 fclose(file);
在这里我被这小小的 * 号给弄迷糊了,不知道为什么定义的时候有的时候要加上*号,有的定义又不加,如例子中 file的时候需要加,int,char 的时候就不加。后来论坛中的朋友提供了如下解释:
int char 是基本类型的变量 不需要指针来管理
FILE NSString 等类型都属于引用类型 也就是对象 需要用*来修饰和调用
感觉还是有些似懂非懂,先记下来在实际使用中取体会吧。如果有朋友看到我的学习笔记,希望能抽出时间来给我指点一二,不甚感激。
第三个例子:
int main(int argc,const char * argv[])
{
if(argc==1)
{
NSLog(@"you need to provide a file name");
}
FILE *wordFile=fopen(argv[1],"r");
char word[100];
while(fgets(word,100,wordFile))
{
word[strlen(word)-1]='\0';
NSLog(@"%s is %d characters long",word,strlen(word));
}
fclose(wordFile);
return(0);
}
可以看出,这个例子是第二个例子的加强版,不过同样的有几个地方不是很明白。
if(argc==1)这一句是什么意思,为什么是这样判断。在这里我已经找到答案了,所以在此更新一下。网上查到的都比较简洁,都只是提到了,argc代表启动参数等等。在这里详细说下。argc参数保存的是启动参数的个数。因为默认程序名会用作启动参数传递,所以argc>=1 ,如果用户不提供文件路径,那么argc的值为1,如代码中所示,将不会读取文件,并弹出提示信息。下面加上在xcode中如何提供启动参数的方法。(此处与书中所写的方法不一样,我用它上面写的方法找不到指定的文件,开始认为是路径中存在中文的原因,后来将中文字符全都去掉。然后又几番修改,将我的实际解决方法贴出来)
- 在xcode文件列表中展开Executables,并双击程序名。
- 单击Arguments下的加号,并输入启动参数(在此添加文件名称)
- 在General标签,将working directory改到project director的checkbox按钮上。
添加完成之后,就会和之前的例子得到一样的结果了。