为什么WSAStringToAddress采用非const AddressString?

时间:2016-10-10 07:00:02

标签: winapi parameters const winsock2

new Color(int rgb)州的Windows文档:

_In_

_Inout_ const char* 参数,而不是 WSAStringToAddress 参数。我不清楚为什么API采用非常量指针,并且因为我有WSAStringToAddress而导致编译失败。

我的第一个问题是,为什么char*采用非常量指针?

我的第二个问题是,施放常数是否安全? WSAStringToAddress会修改inet_addr参数吗?

这里有更多的背景故事......由于当前版本的Visual Studio中已弃用的警告,我试图在int inet_pton(int af, const char *src, void *dst) { struct sockaddr_storage ss; int size = sizeof(ss); char src_copy[INET6_ADDRSTRLEN+1]; ZeroMemory(&ss, sizeof(ss)); /* stupid non-const API */ strncpy (src_copy, src, INET6_ADDRSTRLEN+1); src_copy[INET6_ADDRSTRLEN] = 0; if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) ... } 替换中使用def a(): print('a') def b(): print('b') def c(): print('c') shuffle([a,b,c])

以下是WSAStringToAddress问题中详述的相同问题。 Korponaić遇到了同样的问题。这是额外副本的原因:

a
b
c

1 个答案:

答案 0 :(得分:0)

  1. Windows是C API,因此定义为name = input("Hello, what is your name? ") restart = input ("Do you want to chat 'y' (type 'y' for yes) or 'n'") while restart == "y": print("Hello " + name) feeling = input("How are you today? ") print("I'm feeling good!") else: print("Sorry, the restart") else: print("goodbye") 的C字符串不是常量。 C ++通过使它们不变来改变这种情况。
  2. 是的,使用"Some string"丢弃常数是非常安全的