将字符串传递给C中的函数

时间:2010-11-10 16:44:26

标签: c pointers

下面给出的代码将文件内容读取到缓冲区,然后用它做一些事情。

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中的单个字符?

6 个答案:

答案 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函数,也可以使用包含长度的整数参数。通过长度可能是更好的做法。