user-0 提问: 如何将一个字符串指针中的数据显示出来?

回复:
user: user-1
content: 如果buf中不时字符串,而只是一个缓冲区而已的话,你要自行实现,至少标准库中没有现成的. 参考一下吧:http://blog.csdn.net/mujiok2003/article/details/8650584

user: user-2
content: 引用 22 楼 huabinsir 的回复:[quote=引用 20 楼 bijiaoben 的回复:] 你在用%s打印的时候，是遇到'\0'认为是字符串结束。strcpy的时候也是遇到'\0'的时候认为是字符串结束吧？这样子两种操作有区别吗？ 另外问一下，楼主有没有同时使用2种方式打印一个相同地址的字符串？会是不同结果吗？  有区别, pBuf(new 产生的) 可能是放在堆上, 经过 strcpy(buf, pBuf), 数据放在 栈上(buf 是局部变量).[/quote] 你没有明白我的意思，我的意思是打印的内容真的有区别吗？ 一个在堆上一个在栈上，你不如说两个地址不一样好了。。。你确定你们的系统在打印堆上和栈上的内容会有不同处理吗？ 还是先确定最基本的字符串的内容吧，不然你的strcpy的结果都可能不对，弄不好还会造成你栈上的数组的溢出。

user: user-3
content: 乱码是你给pBuf指向的字符串赋值时就已经不对了，不然直接printf pBuf应该是可以的

user: user-4
content: 系统返回的BUF肯定还同时还同时返回了有效字节长吧，要想PRINTF没乱码，必须把该BUF拿出来，重新在后面强制0，就没有了

user: user-5
content: 乱码是因为你的板子上字符集的问题。 而不是打印的问题。 对于系统，这个指针传过去的就是一堆二进制的东西，而且是正确的，但是没有正确显示出来而已。  我认为应该是这样。

user: user-0
content: 引用 24 楼 bug1190 的回复:系统返回的BUF肯定还同时还同时返回了有效字节长吧，要想PRINTF没乱码，必须把该BUF拿出来，重新在后面强制0，就没有了  《-----个人觉得, 这个有道理.

user: user-2
content: 引用 12 楼 huabinsir 的回复:这里所说的 pBuf (字符串指针) 是系统返回的， 我想显示时，是不是要给它再补0 ?   pBuf 不处理的话，直接显示，经常出现乱码, 请问应如何正确地显示pBuf (字符串指针) 中的数据.   <---这是我的一个疑问 我的疑问，直接printf("%s\n",pBuf)显示不正确，那么 char buf[100]={0}; strcpy(buf, pBuf); printf(buf); 这个显示就是正确的吗？printf(buf);是什么用法？

user: user-6
content: 仅供参考： FILE_NOTIFY_INFORMATION The FIND_NOTIFY_INFORMATION structure describes the changes found by the ReadDirectoryChangesW function.  typedef struct _FILE_NOTIFY_INFORMATION {    DWORD NextEntryOffset;    DWORD Action;    DWORD FileNameLength;    WCHAR FileName[1]; } FILE_NOTIFY_INFORMATION;  Members NextEntryOffset  Specifies the number of bytes that must be skipped to get to the next record. A value of zero indicates that this is the last record.  Action  Specifies the type of change that occurred. Value Meaning  FILE_ACTION_ADDED The file was added to the directory.  FILE_ACTION_REMOVED The file was removed from the directory.  FILE_ACTION_MODIFIED The file was modified. This can be a change in the time stamp or attributes.  FILE_ACTION_RENAMED_OLD_NAME The file was renamed and this is the old name.  FILE_ACTION_RENAMED_NEW_NAME The file was renamed and this is the new name.    FileNameLength  Specifies the length, in bytes, of the filename portion of the record. Note that this length does not include the terminating null character.  FileName  This is a variable-length field that contains the filename relative to the directory handle. The filename is in the Unicode character format and is not null-terminated.  QuickInfo   Windows NT: Requires version 4.0 or later.   Windows: Unsupported.   Windows CE: Unsupported.   Header: Declared in winnt.h.  See Also File I/O Overview, File Structures, ReadDirectoryChangesW     void WINAPI CheckAddedFile( LPDIRECTORY_INFO lpdi, PFILE_NOTIFY_INFORMATION lpfni) {     TCHAR      szFullPathName[MAX_PATH];     TCHAR      szFileName[MAX_PATH];      memcpy( szFileName, lpfni->FileName ,lpfni->FileNameLength);     szFileName[lpfni->FileNameLength/sizeof(TCHAR)]=0;     lstrcpy( szFullPathName, lpdi->lpszDirName );     lstrcat( szFullPathName, L"\\" );     lstrcat( szFullPathName, szFileName );     wprintf( L"%s\n", szFullPathName );     bufput(szFileName);     wprintf( L"%s added\n",szFileName);//Zz renamed\n",szFileName); }

user: user-0
content: 这里所说的 pBuf (字符串指针) 是系统返回的， 我想显示时，是不是要给它再补0 ?   pBuf 不处理的话，直接显示，经常出现乱码, 请问应如何正确地显示pBuf (字符串指针) 中的数据.   <---这是我的一个疑问

user: user-6
content: 引用 8 楼 gz_qmc 的回复:[quote=引用 4 楼 huabinsir 的回复:] [quote=引用 2 楼 gz_qmc 的回复:] 直接printf pBuf不行吗？2  直接printf pBuf ， 有时后面会有乱字符出现 .[/quote]  你应该补一下基础了，字符串是以零作为结束的 所以一般定义字串都是  char *pBuf="akjdhfkjadflajd\0";  对于书组型的字串，如果是8字符，就应该申请9个，最后一个为零 比如： char ppp[9]="ABCDEFGH";  否则，没有结尾，不乱码才怪[/quote] 你画蛇添足了。

user: user-2
content: 应该要的。

user: user-0
content: 引用 8 楼 gz_qmc 的回复:[quote=引用 4 楼 huabinsir 的回复:] [quote=引用 2 楼 gz_qmc 的回复:] 直接printf pBuf不行吗？2  直接printf pBuf ， 有时后面会有乱字符出现 .[/quote]  你应该补一下基础了，字符串是以零作为结束的 所以一般定义字串都是  char *pBuf="akjdhfkjadflajd\0";  对于书组型的字串，如果是8字符，就应该申请9个，最后一个为零 比如： char ppp[9]="ABCDEFGH";  否则，没有结尾，不乱码才怪[/quote]  这里所说的 pBuf (字符串指针) 是系统返回的， 我想显示时，是不是要给它再补0 ?   <---这是我的一个疑问

user: user-7
content: 引用 22 楼 huabinsir 的回复:[quote=引用 20 楼 bijiaoben 的回复:] 你在用%s打印的时候，是遇到'\0'认为是字符串结束。strcpy的时候也是遇到'\0'的时候认为是字符串结束吧？这样子两种操作有区别吗？ 另外问一下，楼主有没有同时使用2种方式打印一个相同地址的字符串？会是不同结果吗？  有区别, pBuf(new 产生的) 可能是放在堆上, 经过 strcpy(buf, pBuf), 数据放在 栈上(buf 是局部变量).[/quote]  我也怀疑你的strcpy究竟能不能正常工作。 按照我现在的理论，应该也并不是pBuf里的内容才对。

user: user-0
content: 引用 20 楼 bijiaoben 的回复:你在用%s打印的时候，是遇到'\0'认为是字符串结束。strcpy的时候也是遇到'\0'的时候认为是字符串结束吧？这样子两种操作有区别吗？ 另外问一下，楼主有没有同时使用2种方式打印一个相同地址的字符串？会是不同结果吗？  有区别, pBuf(new 产生的) 可能是放在堆上, 经过 strcpy(buf, pBuf), 数据放在 栈上(buf 是局部变量).

user: user-8
content: c

user: user-2
content: 你在用%s打印的时候，是遇到'\0'认为是字符串结束。strcpy的时候也是遇到'\0'的时候认为是字符串结束吧？这样子两种操作有区别吗？ 另外问一下，楼主有没有同时使用2种方式打印一个相同地址的字符串？会是不同结果吗？

user: user-0
content: 我个人认为: 可能是这个小型嵌入式系统 eLIBs_printf 处理得不是很好, pBuf 本可直接输出，但用eLIBs_printf输出时，时常是乱码（有可能和别的地址上的数据连在一起了）。  char buf[100]={0}; strcpy(buf, pBuf); <==这样， 会在字符串结尾处自动加上一个 \0, 但定义 char buf[100]={0}时，消耗了资源(虽然会释放), 语句也多了几条.

user: user-2
content: 引用 15 楼 huabinsir 的回复:[quote=引用 14 楼 bijiaoben 的回复:] [quote=引用 12 楼 huabinsir 的回复:] 这里所说的 pBuf (字符串指针) 是系统返回的， 我想显示时，是不是要给它再补0 ?   pBuf 不处理的话，直接显示，经常出现乱码, 请问应如何正确地显示pBuf (字符串指针) 中的数据.   <---这是我的一个疑问 我的疑问，直接printf("%s\n",pBuf)显示不正确，那么 char buf[100]={0}; strcpy(buf, pBuf); printf(buf); 这个显示就是正确的吗？printf(buf);是什么用法？[/quote]  printf(buf) ==> eLIBs_printf("..%s..\n\n", buf); (一个小型嵌入式系统上的输出函数)	 [/quote] 楼主认为这两种方法有差别吗？

user: user-6
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-0
content: eLIBs_printf("..%s..\n\n", pBuf); (这样，经常出现乱字符)