我一直试图让strcmp在以下程序中返回true已经很多天了,我已经阅读了strcmp,read,write的手册页...我有其他人的帖子确切地说了同样的问题。以下源代码只是一个令我感到沮丧的测试程序,有一些注释掉的行是我在使strcmp按预期工作时所做的其他尝试。我用' gdb -g'编译了并一次通过一条指令。 printf语句几乎讲述了整个故事。我无法得到buf或bufptr的值等于' t'永远。我已经简化了程序,并且只是一次一个地将一个字符打印到屏幕上,并且它们从所读取的任何文件中按预期打印,但是,一旦我开始使用strcmp,事情变得疯狂。我无法为我的生活找到一种方法,让buf中的值成为我期待它的单一字符。 当简化为write(1,...)调用时,它将预期的单个字符写入stdout,但strcmp写入单个字符“t”。永远不会返回0. !!!!!先感谢您。我原本没有在那里使用bufptr并且正在使用strcmp进行buf本身并尝试使用bufptr [0] = buf [0]并且静止不一样。
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#define BUF_SIZE 1
void main(int argc, char *argv[])
{
char buf[BUF_SIZE];
int inputFd = open(argv[1], O_RDONLY);
char tee[] = "t";
int fff = 999;
char bufptr[BUF_SIZE];
// char *bufptr[BUF_SIZE];
while (read(inputFd, buf, BUF_SIZE) > 0) {
bufptr[0] = buf[0];
// bufptr = buf;
printf("********STRCMP RETURNED->%d\n", fff); // for debugging purposes
printf("--------tee is -> %s\n", tee); // for debugging purposes
printf("++++++++buf is -> %s\n", buf); // " " "
printf("@@@@@@@@bufptr is -> %s", bufptr); // " " "
write (1, buf, BUF_SIZE);
if ((fff = strcmp(tee, bufptr)) == 0)
printf("THIS CHARACTER IS A T");
}
close(inputFd);
}
答案 0 :(得分:2)
str
- 函数族期望字符串作为输入,它是存储以空字符结尾的字符序列的数组。但是,您不在缓冲区中为空字符提供空间。要创建缓冲区字符串,您需要为空字符添加空格并将值清零,以便它们以空字符结尾。
void main(int argc, char *argv[])
{
char buf[ BUF_SIZE + 1 ] = {0};
int inputFd = open(argv[1], O_RDONLY);
char tee[] = "t";
while (read(inputFd, buf, BUF_SIZE) > 0) {
if ( strcmp( tee, buf ) == 0 )
printf("THIS CHARACTER IS A T");
}
close(inputFd);
}