首页 > 解决方案 > 以下 strncpy 调用的解释

问题描述

我目前正在阅读一本书(Linux Socket Programming - BY Examples),在第 45 页作者使用了一个奇怪的用法(调用),strncpy我不明白为什么它也有效:

strncpy(  adr_unix.sun_path,
          pth_unix,
          sizeof( adr_unix.sun_path ) - 1 ) [sizeof adr_unix.sun_path - 1] = 0;

我期待它应该是这样的:

strncpy(    adr_unix.sun_path,
            pth_unix,
            sizeof( adr_unix.sun_path ) - 1 );

adr_unix.sun_path[sizeof adr_unix.sun_path - 1] = 0;

? 的第三个参数中使用了什么样的代码strncpy

sizeof( adr_unix.sun_path - 1 ) ) [sizeof adr_unix.sun_path - 1] = 0;

标签: csocketsstrncpy

解决方案


注意strncpy呼叫在这里终止

strncpy(adr_unix.sun_path,
        pth_unix,
        sizeof( adr_unix.sun_path ) - 1 )

所以因为strncpy返回的目的地(adr_unix.sun_path)调用它等同于你的

strncpy(    adr_unix.sun_path,
        pth_unix,
        sizeof( adr_unix.sun_path ) - 1 );

adr_unix.sun_path[sizeof adr_unix.sun_path - 1] = 0;

和第三个参数strncpy调用只是sizeof( adr_unix.sun_path) - 1


推荐阅读