上記のコードは素晴らしい作品が、私は変更括弧の余分なセットを削除する場合代入エラーの左オペランドとして必要なl-値ですが、なぜですか?一般的には
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* mystrncpy(char* dst, const char* src, size_t n) {
char* temp = dst;
while (n-- > 0 && (*temp = *src)) {
temp++;
src++;
}
return dst;
}
int main() {
const char* str = "Hello World!";
char buf[50];
memset(buf, 0, sizeof(buf));
mystrncpy(buf, str, sizeof(buf));
printf("%s\n", buf);
}
...このエラーが発生した理由を私は知っているが、私は、この特定のインスタンスで少し混乱していますwhileループ:
while (n-- > 0 && *temp = *src)
エラーが発生します。私はオペレータの優先順位については何かだと思うが、私はちょっと困惑している。誰かがこのコンパイラのエラーを表示するためにループの変更を行っている間に何を説明することができますか?
演算子の優先順位の問題が既に疑わしい場合は、式の中の演算子の優先順位のルールを調べるのを止めますか? –
@KerrekSB時にはプッシュは長い道のり:)。 – JonH
正に、私はC++にとても慣れていて、実際のCコードを見ると、私はいくつかのことを当然と考えていることがあるので、私は仮定して見逃すかもしれない「余分なおかず」があるかどうかを尋ねたい。たとえば、Cでstructキーワードを使う方法の全体的な考え方は、最近私の心を揺さぶっていました - そして、どのように構造体と同じ名前の構造体をtypedefできますか? –