当前位置:  开发笔记 > 编程语言 > 正文

如何访问字符串中的单独字符?

如何解决《如何访问字符串中的单独字符?》经验,为你挑选了1个好方法。

我有一个像这样的字符串:

char* hello = "Hello, world!";

我必须循环遍历此字符串中的每个字符.我试过这些,但他们要么给我编译错误,要么访问违规,或者只是永远不要离开循环:

for( char* p = hello; p!=0; p++ ) printf("%x\n", p);

for( char* p = &hello; p!=0; p++ ) printf("%x\n", p);

for( char* p = *hello; p!=0; p++ ) printf("%x\n", p);

for( char* p = hello; *p!=0; *p++ ) printf("%x\n", *p);

我真的不明白指针在C中是如何工作的,我只是随机地放置星号直到它起作用,在这种情况下它不会.

我没有strlen像其他问题一样使用.



1> Tom Zych..:

p是一个指针char.因此,取消引用它会*p产生一个char.

添加1可p将其移动到您正在遍历的任何字符串中的下一个字符.添加1以*p向字符添加一个p指向.

让我们仔细检查每一次尝试,看看它有什么问题.

char* hello = "Hello, world!";

公共部分:hello是一个指针char,它指向一个常量字符串,编译器将嵌入到目标文件中的某个位置.请注意,不应更改此类字符串; 这样做通常会出错.

如果你想要一个可以改变的字符串,那就char hello[] = "Hello, world!"; 有效; 这会创建一个缓冲区作为可以自由操作的局部变量.

for( char* p = hello; p!=0; p++ ) printf("%x\n", p);

在这里,你正确地指出p了第一个字符hello.但是,然后通过比较p零来查找字符串的结尾.p是一个指针,0作为指针意味着一个NULL指针.

for( char* p = &hello; p!=0; p++ ) printf("%x\n", p);

在这里,您指向p地址hello,表示进程存储指针所在的任何位置hello.取消引用这将给你hello,而不是它指向的.

for( char* p = *hello; p!=0; p++ ) printf("%x\n", p);

在这里,你取消引用hello,给出char一个值为H.分配给p它的是类型不匹配,语义也不正确.

for( char* p = hello; *p!=0; *p++ ) printf("%x\n", *p);

在这里,最后,您正确地将哪些p点与零进行比较. 但是,你也增加*p而不是p,这是不正确的,并且(如上所述)也会导致像这样的常量字符串的问题. *p++也将增加p,返回p增量前指向的内容,因为它没有被使用,所以没有实际意义.

另一件事:你想打印指针的值p,还是char它指向的?前三个正确打印指针.最后一个%x用来打印char.不确定会做什么,但这不正确.

既然你用过%x,我假设你想用十六进制打印字符本身?那将是printf("%x\n", *p);最后一个.但是,我建议%02x使用零填充来获得恒定的宽度.

假设您要打印字符,这是一个正确的版本:

for( char* p = hello; *p!=0; p++ ) printf("%x\n", *p);

或者,既然0是假的,我们可以简单地说,并且可以说:

for( char* p = hello; *p; p++ ) printf("%x\n", *p);

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有