c - 使用指针在 C 中解析 TFTP 数据包的字符串

标签 c pointers buffer tftp

我使用 recvfrom512 字节 缓冲区接收 TFTP 数据包(读取请求)。

字符串(要传输的文件名)从缓冲区的第三个字节开始。前两个是操作码的保留。

我写了下面的函数:

char * parseFileName(char * buffer){
    char * filename;

    for(int i = 0; buffer[i] != '\0'; i++)
        *(filename + i) = buffer[i];

    *(filename + i) = '\0';

    return filename;
}

考虑到操作码偏移,我称之为:

char * filename = parseFileName(buffer + 2);

但是,这不起作用,程序停止了:

printf("%s", filename);

除非我添加这个:

printf("\n");

就在 parseFileName 函数的 return 语句之前。只有这样我才能在调用函数上打印文件名字符串。

为什么会这样?

最佳答案

因为您没有为 char* filename 分配任何内存。

如果您知道该字符串从 buffer+2 开始并且有 \0 终止符,那么您可以直接执行:

char* parseFileName(char* buffer) {
  return strdup(buffer);
}

char* fileName = parseFilename(buffer+2);

请注意,当您完成文件名时,这需要一个free

关于c - 使用指针在 C 中解析 TFTP 数据包的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32662441/

相关文章:

c - 参数比预期更多的函数调用

c - DBus同步调用超时

c - OpenCL - 写入缓冲区为零?

C编程套接字缓冲区

C语言-从文本文件中读取特定数据

c - 为什么我在文件开头有一个连字符?

c++ - 为什么我不能分配这个指针?

c++ - 关于传递给函数后指针重用的问题

c - 在 C 语言中,为什么我可以看到一个值写在不同变量的数组末尾之后?

delphi - Indy,如何知道所需缓冲区的大小?