小编PTN*_*PTN的帖子

strlen没有给出正确的字符串长度C.

我正在从我的字典中读取并打印出单词+单词的长度以用于测试目的.

我使用strlen来获取字符串的长度.但是,我得到的数字不正确.我相信strlen不计算\ 0字符.

我正在读字典中的前10个单词.我的预期输出应该是:

W:A L:1
W:A's L:3
W:AA's L:4
W:AB's L:4
W:ABM's L:5
W:AC's L:4
W:ACTH's L:6
W:AI's L:3
W:AIDS's L:6
W:AM's L:4
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的(请注意L:如何在另一条线上.我认为这就是问题所在):

W:A
 L:2
W:A's
 L:4
W:AA's
 L:5
W:AB's
 L:5
W:ABM's
 L:6
W:AC's
 L:5
W:ACTH's
 L:7
W:AI's
 L:5
W:AIDS's
 L:7
W:AM's
 L:5
Run Code Online (Sandbox Code Playgroud)

以下是我的代码:

FILE* dict = fopen("/usr/share/dict/words", "r"); //open the dictionary for read-only access 
   if(dict == NULL) {
      return;
   }

   int i;
   i = 0;

   // Read each line of the file, and insert the word in …
Run Code Online (Sandbox Code Playgroud)

c io strlen

6
推荐指数
1
解决办法
705
查看次数

什么 !(char*)表示在C中

我在看一个例子,我看到了这个:

char *str;

/* ... */

if (!str || !*str) {
    return str;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着它是空的还是什么?

c pointers char

6
推荐指数
1
解决办法
1808
查看次数

只需添加元素即可更改数组大小,无需推送javascript

我知道改变数组大小的通用方法是使用.push().

但是,今天我在angularJS中看到了一段代码:

var service = {
   pages: [],
   doSmth: doSmth
};

doSmth();

function doSmth() {
   service.pages[1] = "abc";
   service.pages[5] = "def";
}
Run Code Online (Sandbox Code Playgroud)

我在浏览器上运行调试器,发现在doSmth()调用之前,pages[1]未定义,但在此之后,pages[1]分配值没有任何错误.

这怎么可能?

javascript angularjs

6
推荐指数
1
解决办法
7941
查看次数

在C中比较两次

如何比较C中的时间?我的程序获得了2个文件的最后修改时间,然后比较该时间以查看哪个时间是最新的.是否有一个功能可以比较您的时间,或者您必须自己创建一个?这是我的获取时间功能:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>

void getFileCreationTime(char *path) {
    struct stat attr;
    stat(path, &attr);
    printf("Last modified time: %s", ctime(&attr.st_mtime));
}
Run Code Online (Sandbox Code Playgroud)

c datetime compare

5
推荐指数
2
解决办法
1万
查看次数

字符指针算术C.

我正在学习指针算术,我遇到了这样的事情:

char *str1, *str2;

/* stuff in between */

int f = str2 - str1;
Run Code Online (Sandbox Code Playgroud)

什么str2 - str1回来了?比方说str1 = "foo"str2 = "foobar".

c char pointer-arithmetic

3
推荐指数
1
解决办法
2164
查看次数

将 int 转换为 char* C

所以我试图从文件中读取单词。但是,我必须使用putchar(ch)where chis an int。如何将 ch 转换为字符串 (char *) 以便我可以将其存储在 char * 变量中并将其传递给另一个将 char * 作为参数的函数。我实际上只是想存储它而不是打印它。

这就是我所拥有的:

int main (void)
{
   static const char filename[] = "file.txt";
   FILE *file = fopen(filename, "r");
   if ( file != NULL )
   {
      int ch, word = 0;
      while ( (ch = fgetc(file)) != EOF )
      {
         if ( isspace(ch) || ispunct(ch) )
         {
            if ( word )
            {
               word = 0;
               putchar('\n');
            }
         }
         else
         {
            word = 1;
            putchar(ch); …
Run Code Online (Sandbox Code Playgroud)

c char

3
推荐指数
1
解决办法
1万
查看次数

bind()返回权限被拒绝C.

我正在尝试编写一个程序,它接收端口号作为命令行参数并启动HTTP服务器.我正在通过listenfd来接受()来做这件事.但是,我从open_listenfd()获取权限,然后从Accept()获取错误的描述符错误.

open_listenfd()和Accept()函数是从http://csapp.cs.cmu.edu/2e/ics2/code/src/csapp.c复制的.

我将端口100传递给程序:

int open_listenfd(int port)
{
   int listenfd, optval=1;
   struct sockaddr_in serveraddr;

   /* Create a socket descriptor */
   if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
      return -1;

   /* Eliminates "Address already in use" error from bind */
   if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int)) < 0)
      return -1;

   /* Listenfd will be an endpoint for all requests to port on any IP address for this host */
   bzero((char *) &serveraddr, sizeof(serveraddr));
   serveraddr.sin_family = AF_INET; …
Run Code Online (Sandbox Code Playgroud)

c sockets network-programming

3
推荐指数
1
解决办法
2137
查看次数

什么(;;)和while(); 在C中的意思

我正在看一些示例代码,我看到有人这样做了

for (;;) {
// ...
}
Run Code Online (Sandbox Code Playgroud)

这相当于while(1) { }

那怎么while(condition);办?我不知道背后的原因';'而不是{}

c for-loop while-loop

3
推荐指数
2
解决办法
6910
查看次数

MIPS跳转和分支指令范围

我刚刚开始学习MIPS,我很难理解跳转和分支指令的范围.我知道"远"PC如何跳跃和分支有限制,但我不明白为什么.

和2个的具体问题,如果电流值PCIS 0x00000000,是有可能做到1个跳转到一个随机地址?如果电流值PCIS 0x00000600,是有可能做到1个跳转到一个随机地址?

mips

3
推荐指数
1
解决办法
1万
查看次数

为什么2个线程递增一个变量会导致不同的输出

我刚刚开始学习并发编程,即使我对此有一个模糊的想法,为什么两个线程递增一个变量会导致不同的输出?

假设变量i是全局的,并且有两个线程试图这样做

i = i + 1;
Run Code Online (Sandbox Code Playgroud)

为什么输出可以是1还是2?假设主线程没有退出,因为我知道有可能主线程在其中一个线程能够执行任何操作之前退出.

c concurrency multithreading

2
推荐指数
1
解决办法
422
查看次数