我是C语言的新手,虽然我听说它和C++非常相似,因为C++是C语言的一个附加组件。
我似乎无法在方法中设置全局变量(空字符串),然后将其打印到文本文件中。
我尝试过一些事情,但是基于一些似乎有意义的事情,并且在我的程序的其他部分对我有效。我就在这里:

char fileReqName[1024] = "";//trying to create the global variable
//code lines and methods
//theres a pointer that point's to a "token" thats a string.. called pptr
strncpy(fileReqName, pptr, sizeof(pptr));

//in another method:
fputs(fileReqName,file_ptr);

但没用。
它应该是从浏览器请求中获取“文件名”。有时它会将浏览器要访问的文件名剪切成一个较小的字符串,有时它不会显示任何内容。这可能是令牌的问题,但当我之前显示它时,令牌总是正确的。
我也试过:
strcpy(fileReqName, pptr);

好像有时候也管用哈。我想我可能需要检查其他代码,看看为什么它没有显示正确的字符串/路径?
有什么建议吗?谢谢

最佳答案

我不同意3个张贴的答案,并提交另一个解决方案。n参数的主要用途是确保目标s1不会溢出。

// prototype
#include <string.h>
char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
// Recommended usage for OP
char fileReqName[1024];
fileReqName[sizeof(fileReqName) - 1] = '\0';
...
strncpy(fileReqName, pptr, sizeof(fileReqName) - 1);

这将执行通常的strcpy()功能,并增加2个预防功能。
1即使strlen(pptr)等于或大于1023,也只写入前1023,防止缓冲区覆盖。
2如果出现1,\0赋值将确保fileReqName以a\0结束。
第一种解决方案建议strlen(pptr)。这会产生各种各样的问题,因为\0字节未复制到fileReqName,使其可能未终止。它不能防止超支。
strncpy(fileReqName, pptr, (strlen(pptr) + 1))的问题是它不能防止fileReqName中的缓冲区溢出。真的和strcpy(fileReqName, pptr)没什么不同。
printf()解决方案很好地描述了op的试用解决方案中的问题,但是没有提供op应该做什么。

09-29 23:59