下面给出的代码将文件内容读取到缓冲区,然后用它做一些事情。
char *getData(){
char *buf = (char*) malloc(100);
//write file contents to buf
return buf;
}
char *bar(char *buf){
//do something with buf
return buf;
}
int main(void){
char *result;
result = bar(getData());
return 0;
}
第9行的return buf;
工作正常 - 它返回整个字符串。问题是如何在功能栏中访问buf中的单个字符?
答案 0 :(得分:7)
如果您想要访问单个字符,您可以像对待任何其他地方的任何字符串一样进行操作:buf[index]
(对于指针ptr[index]
与{{1}完全相同}})。
顺便说一句,在那段代码中有一个*(ptr+index)
而不是它对应的malloc
- 你正在泄漏内存。在这么小的程序中,问题不明显(应用程序立即终止,因此操作系统会自动回收所有仍未释放的内存),但在较大的程序中问题可能会变得严重。
答案 1 :(得分:2)
您可以编制索引。
if (buf != NULL) {
int i = 0;
while (buf[i] != '\0') {
// Do Processing
++i;
}
}
答案 2 :(得分:2)
由于char *是一个字符串数组,你应该使用索引器buf [index] ...
答案 3 :(得分:1)
buf [i](或*(buf + i))是buf中的第i个字符。
答案 4 :(得分:1)
您可以将字符串(char *)作为char:
的数组来处理 char x = buf[0];
答案 5 :(得分:1)
也许我不理解你的问题,但乍一看我会说你只需要使用数组访问:
char *bar(char *buf)
{
char newFifthCharacter = 'X';
buf[4] = newFifthCharacter;
return buf;
}
请注意,您需要一种方法来进行边界检查,这样您就不会超出数组的末尾。您可以使用strlen
中的bar
函数,也可以使用包含长度的整数参数。通过长度可能是更好的做法。